我想使用boost :: enable_if打開/關閉類模板中的某些功能,但始終得到編譯錯誤錯誤:無類型名爲「type」的struct boost :: enable_if。如何在類模板中使用boost :: enable_if
我的片段:
#include <iostream>
#include <tr1/type_traits>
#include <boost/utility.hpp>
namespace std {
using namespace tr1;
}
template <typename T1>
struct C {
template< typename T2 >
void test(T2&, typename boost::enable_if<
std::is_const<T1>, T1 >::type* = 0) {
std::cout << "const" << std::endl;
}
template< typename T2 >
void test(T2&, typename boost::disable_if<
std::is_const<T1>, T1 >::type* = 0) {
std::cout << "non-const" << std::endl;
}
};
int main() {
const int ci = 5;
int i = 6;
C<char> c;
c.test(ci);
c.test(i);
return 0;
}
但類似如下的代碼工作的優良:
#include <iostream>
#include <tr1/type_traits>
#include <boost/utility.hpp>
namespace std {
using namespace tr1;
}
template <typename T1>
struct C {
template< typename T2 >
void test(T2&, typename boost::enable_if<
std::is_const<T2>, T1 >::type* = 0) {
std::cout << "const" << std::endl;
}
template< typename T2 >
void test(T2&, typename boost::disable_if<
std::is_const<T2>, T1 >::type* = 0) {
std::cout << "non-const" << std::endl;
}
};
int main() {
const int ci = 5;
int i = 6;
C<char> c;
c.test(ci);
c.test(i);
return 0;
}
我想實現的是禁用/啓用基於類模板聲明的類型的一些成員函數。其實模板成員函數是不需要的。他們只爲SFINAE添加。
任何人都可以幫忙?
謝謝!