gpt4 book ai didi

类方法 : partial specialization if parameter is enum 上的 C++ 类型特征

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:42 24 4
gpt4 key购买 nike

我的平台是带有 Visual Studio Express 2012 的 Windows。

我有一个模板化的方法如下

struct A 
{
template<class T> void blub(T value);
};

我想拥有如下几个专业:

template<> void A::blub(std::string value) { /* ... */ }
template<> void A::blub(int value) { /* ... */ }

但是,现在我想包括枚举,就像这样:

enum MyEnum { ENUM_1 };

A a;
a.blub(ENUM_1);

当然,这会失败,因为没有针对该类型的专门化。我不知道预先准确的枚举,所以我想推导出一个通用的枚举模板特化。

像下面这样的操作会导致编译失败:

template<class T> void A::blub(const typename std::enable_if<std::is_enum<T>::value, T>::type& value) { /* ... */ }

编译器失败并返回 C2244 .这是有道理的,因为编译器通常无法推断出该方法的类型。

这让我得出结论:我想要的是不可能的。对于上述调用,我必须执行以下操作:

A a;
a.blub((int)ENUM_1);

我的结论对吗?我只需要在电话中做 Actor ?一种解决方法是为类创建模板,但我不想这样做,因为除了该方法之外,该类确实做了很多其他事情。

最佳答案

您的尝试试图部分特化一个函数模板——这是不允许的。相反,在返回类型上这样做:

struct A
{
template<typename T>
typename std::enable_if<std::is_enum<T>::value>::type
blub(T value);

// and don't specialize for concrete types,
// just overload:

void blub(std::string value);
void blub(int value);
};

Live example.

关于类方法 : partial specialization if parameter is enum 上的 C++ 类型特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18880106/

24 4 0