无法使用提升enable_if匹配模板方法
Couldn't match the template method using boost enable_if
#include <boost/type_traits.hpp>
#include <boost/utility.hpp>
using namespace boost;
struct Serializable{};
struct Derived : Serializable {};
class Serializer
{
public:
template <typename ValueType>
void operator& (const typename enable_if<is_base_of<Serializable, ValueType>, ValueType>::type& value) {
;
}
};
int main() {
Serializer serializer;
Derived tar;
serializer & tar;
return 0;
}
我使用g++4.4.7,这给了我一个编译错误:错误:"operator&"不匹配在'serializer&焦油
如何实现专业化?
operator &
的右侧值应为ValueType
类型。因此,使enable_if
部分成为(假(结果类型:
#include <boost/type_traits.hpp>
#include <boost/utility.hpp>
using namespace boost;
struct Serializable{};
struct Derived : Serializable {};
class Serializer
{
public:
template <typename ValueType>
const typename enable_if<is_base_of<Serializable, ValueType>, ValueType>::type* operator& (ValueType &v)
{
return 0;
}
};
int main()
{
Serializer serializer;
Derived tar;
int i = 1;
serializer & tar; //ok
serializer & i; //error
return 0;
}
在C++11中,您还可以使enable_if
构造一个默认的模板参数,这将使函数签名保持干净且未修改:
template <typename ValueType, typename = typename enable_if<is_base_of<Serializable, ValueType>, ValueType>::type>
void operator& (ValueType &v)
{
}
相关文章:
- 将成员函数指针作为参数传递给模板方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- C++11:模板方法的模板函数调用无法编译?
- 如何从ECS中的模板方法获取组件?
- 使用 SFINAE 设计模板方法
- 一个模板方法,用于同时接受常量和非常量参数
- C++模板方法中的循环依赖关系
- 在 C++ 中使用模板方法重写类方法
- 类中的模板方法
- 基于枚举参数调用专用模板方法
- 模板中的模板方法 - 实例声明和类方法声明签名不同
- 可变参数模板方法
- 使用模板方法为标头提供空 cpp 时出现问题
- SFINAE 方法在 clang 中完全禁用基类的模板方法
- 将函数和成员函数传递给模板方法
- 从非模板类调用专用模板方法
- MSVC使用constexpr-if从可变模板方法中的基本模板参数中吞下const
- 依赖于特定类类型的C++模板方法
- 有没有办法仅在两个模板参数相同时才覆盖匹配的模板方法?
- C++模板元编程,"static if"解决方法 - 可以改进吗?