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 F2 {};
struct A {};
struct B {};
static_assert(Can& 編譯通過。 IsDetected 的完整實現見 [Wandbox]三へ( へ?? ?)へ ????。
static_assert(!Can&
static_assert(!Can&
媽蛋,知乎改個問題好麻煩。。
===
detection idiom 能解決原問題,但是面對F也是模板類的時候貌似不行
template& class F&>
struct F
{
template&
{
using type = F&
}
};
can&
can&
推薦閱讀:
※C++中是否應避免使用C語言函數?
※C++primer中一個疑似錯誤?
※C++中能顯式定義一個匿名變數嗎?
※C++11 裡面的 u8 字元串字面值有什麼用?
※怎麼用好《C++ Primer》(英文版)?