gpt4 book ai didi

c++ - 是否可以使用 std::enable_if 来选择成员模板特化?

转载 作者:可可西里 更新时间:2023-11-01 17:46:09 24 4
gpt4 key购买 nike

给定一个类声明

class A {
template <typename T> T foo();
};

我想专攻A::foo对于int的各种类型(T,...)和类型类(POD,非POD) .不幸的是,我似乎无法使用 std::enable_if对于后者。以下不编译:

template <> int A::foo<int>(); // OK

template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!

template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!

问题可能是由于 std::enable_if<...> stuff 是函数签名的一部分,我没有在 A 中声明任何这样的成员.那么如何根据类型特征特化模板成员呢?

最佳答案

我认为没有理由在这里专门研究,在我看来重载函数似乎就足够了。

struct A
{
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type foo()
{
std::cout << "integral" << std::endl;
return T();
}

template <typename T>
typename std::enable_if<!std::is_integral<T>::value, T>::type foo()
{
std::cout << "not integral" << std::endl;
return T();
}
}

当检查 POD 或没有 POD 时,您只有这两个选择,因此不需要更通用的函数(并且不允许,因为它会产生歧义)。你还需要更多?您可以在 std::enable_if<std::is_same<int, T>::value, T>::type 的帮助下检查没有专门化的显式类型.

关于c++ - 是否可以使用 std::enable_if 来选择成员模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13084781/

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