gpt4 book ai didi

c++ - Boost 中的 DEFINE_TYPE_NAME 是如何工作的?

转载 作者:行者123 更新时间:2023-11-28 02:36:33 24 4
gpt4 key购买 nike

我以为我懂 C++。错了。

template<typename T>
struct string_type_name;
#define DEFINE_TYPE_NAME(Type) \
template<> struct string_type_name<Type> \
{ \
static char const * _() \
{ \
return #Type; \
} \
}
DEFINE_TYPE_NAME(float);
DEFINE_TYPE_NAME(double);
DEFINE_TYPE_NAME(long double);

代码来自 Boost.Math .这个宏有什么作用,为什么需要它?什么是template<>意思是,没有争论?我们为什么要声明这个函数 static char const * _()

最佳答案

让我们展开宏:

template<typename T>
struct string_type_name;

template<> struct string_type_name<float>
{
static char const * _()
{
return "float";
}
}

template<> struct string_type_name<double>
{
static char const * _()
{
return "double";
}
}

template<> struct string_type_name<long double>
{
static char const * _()
{
return "long double";
}
}

每个结构都以 template<> 开头是 string_type_name 的特化上面声明的类。您会注意到未专门化的模板实际上没有定义 - 这是为了防止您使用不是专门化的类型之一来实例化它。

_函数(不是一个很好听的名字)返回一个 char const* ,这是表示它专门针对的类型的字符串文字。也就是说,它只是一个从类型到字符串的映射:string_type_name<float>::_()会返回 "float" .您可以在下面看到他们是如何使用它的:

BOOST_TEST_MESSAGE("Testing multiplication for "
<< string_type_name<T>::_() << ".");

关于c++ - Boost 中的 DEFINE_TYPE_NAME 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232780/

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