gpt4 book ai didi

c++ - 无法使用 boost enable_if 匹配模板方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:31 26 4
gpt4 key购买 nike

#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,这给了我一个编译错误: 错误:“serializer & tar”中的“operator&”不匹配

如何实现特化?

最佳答案

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++ - 无法使用 boost enable_if 匹配模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com