gpt4 book ai didi

c++ - 一个模板专门化多个类

转载 作者:IT老高 更新时间:2023-10-28 23:11:42 25 4
gpt4 key购买 nike

假设我们有一个模板函数“foo”:

template<class T>
void foo(T arg)
{ ... }

我可以对某些特定类型进行特化,例如

template<>
void foo(int arg)
{ ... }

如果我想对所有内置数字类型(int、float、double 等)使用相同的特化,我会多次编写这些行。我知道 body 可以被扔给另一个函数,并且只需在每个特化的 body 中调用它,但是如果我可以避免为每种类型写这个“void foo(...”)会更好。有没有有没有可能告诉编译器我想对所有这些类型使用这个特化?

最佳答案

您可以使用 std::numeric_limits 来查看一个类型是否为数字类型(is_specialized 对于所有浮点和整数基本类型都为真)。

// small utility
template<bool> struct bool2type { };

// numeric
template<typename T>
void fooImpl(T arg, bool2type<true>) {

}

// not numeric
template<typename T>
void fooImpl(T arg, bool2type<false>) {

}

template<class T>
void foo(T arg)
{ fooImpl(arg, bool2type<std::numeric_limits<T>::is_specialized>()); }

关于c++ - 一个模板专门化多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2430039/

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