gpt4 book ai didi

c++ - 一种用于 POD 的模板特化,一种用于类层次结构和其他情况下的错误?

转载 作者:行者123 更新时间:2023-11-28 00:02:07 29 4
gpt4 key购买 nike

我正在尝试创建一个模板,该模板将以一种方式适用于所有基本类型,另一种方式适用于从 A 派生的所有类,而对其他所有类均无效。阅读 SFINAE,我创建了这样的东西:

struct A {};
struct B : A
{
int a;
};
template <typename T, typename = typename std::enable_if<std::is_base_of<A, T>::value>::type>
void foo(const T& derived)
{
std::cout << "stuff with derived";
}

template <typename T, typename = typename std::enable_if<std::is_fundamental<T>::value>::type>
void foo(const T& pod)
{
std::cout << "stuff with fundamental";
}

int main()
{
foo(7);
B instance;
foo(instance);
}

据我了解,7 (int) 的匹配模板类型在第一种情况下失败,在第二种情况下有效,派生类在第一种情况下有效。我做错了什么?

最佳答案

试试这个:

#include <iostream>

struct A {};
struct B : A
{
int a;
};
template <typename T>
typename std::enable_if<std::is_base_of<A, T>::value, void>::type foo(const T& derived)
{
std::cout << "stuff with derived";
}

template <typename T>
typename std::enable_if<std::is_fundamental<T>::value, void>::type foo(const T& pod)
{
std::cout << "stuff with fundamental";
}

int main()
{
foo(7);
B instance;
foo(instance);
}

enable_if<>的第二个参数是返回类型。

关于c++ - 一种用于 POD 的模板特化,一种用于类层次结构和其他情况下的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38104811/

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