簡體   English   中英

如何在類obj中使用enable_if?

[英]How to use enable_if in a class obj?

下面的代碼可以:

template <class T>
std::enable_if<std::is_atomic<T>::value, bool>
foo(T t) { return true; }

template <class T>
std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }

int main(void){
  foo(1);  // return true
  auto std::vector<int> a{2};
  foo(a);  // return false
}

但是,當我使用一個類將它們捆綁在一起時,無法對其進行編譯:

template <class T>
class test {
public:

std::enable_if<std::is_atomic<T>::value, bool>
foo(T t) { return true; }

std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }
};

int main(...) {
  test<int> obj;
  obj.foo(1);
  test<std::vector<int>> obj2;
  std::vector<int> tmp{2};
  obj2.foo(tmp);
}

lang ++打印:

error: functions that differ only in their return type cannot be overloaded

所以我寫了一些要欺騙編譯器的東西(在第二個foo添加一個S):

template <class S>
std::enable_if<tmp::is_sequence<T>::value, bool>
foo(T t) { return false; }

它仍然無法工作:

error: no type named 'type' in 'std::enable_if<false, bool>'

如何在課堂上使用它?

您忘記在enable_if之后添加:: type :(請參閱enable_if

template <class T> std::enable_if<std::is_atomic<T>::value, bool>::type
foo(T t) { return true; }

兩種成員函數都應具有不同的模板參數(下面的方法可以正常工作)

template <class T>
class test {
public:

template<typename U>
typename std::enable_if<std::is_atomic<U>::value, bool>::type
foo(U t) { return true; }

template<typename U>
typename std::enable_if<tmp::is_sequence<U>::value, bool>::type
foo(U t) { return false; }

};

如果您真的想做自己想做的事情,那么經典的成語就是引入一個帶有默認值的偽SFINAE參數:

bool foo(T t, std::enable_if<..., void*> = nullptr) { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM