標籤:

cpp如何判定某個類是否有特定的成員模板類,並能否以特定的類為參數構建?

struct F
{
template& struct in{};
};
struct F2{};
struct A{};
struct B{};
template& struct can
{
//do some thing
};

can&::value為真,因為能構建F::template in&

can&::value為假,F::template in&構建失敗

can&::value為假,F2不存在template&<...&> in

平台vs2015/17


C++ check member exists

第一個就是 --&> check if member exists using enable_if


給個關鍵字吧,detection idiom


謝邀,這個問題用 Detection idiom 實現起來是很容易的:

template &
using CanImpl = typename F::template in&;
template &
using Can = IsDetected&;

然後

struct F1 { template & struct in {}; };
struct F2 {};
struct A {};
struct B {};

static_assert(Can&::value, "");
static_assert(!Can&::value, "");
static_assert(!Can&::value, "");

編譯通過。

IsDetected 的完整實現見 [Wandbox]三へ( へ?? ?)へ ????。


媽蛋,知乎改個問題好麻煩。。

===

detection idiom 能解決原問題,但是面對F也是模板類的時候貌似不行

template& class F&>
struct F
{
template& struct in
{
using type = F&;
}
};

can&, A,B&>::value -&> true

can&, A&>::value -&> error std::is_same的參數太少。


推薦閱讀:

C++中是否應避免使用C語言函數?
C++primer中一個疑似錯誤?
C++中能顯式定義一個匿名變數嗎?
C++11 裡面的 u8 字元串字面值有什麼用?
怎麼用好《C++ Primer》(英文版)?

TAG:C | 模板C |