我想使用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添加。
任何人都可以帮忙?
谢谢!