gpt4 book ai didi

c++ - 模板类方法的默认参数

转载 作者:行者123 更新时间:2023-11-28 01:03:35 24 4
gpt4 key购买 nike

有没有办法为模板类的方法提供默认参数值?例如我有以下内容:

template<class T>
class A
{
public:
A foo(T t);
};

我应该如何修改它来为 foo 提供类型为 T 的默认参数?例如:Tint 那么默认值为 -23,或者 Tchar* 那么默认值“something” 等。这有可能吗?

最佳答案

如果您希望默认参数只是默认值(通常为零),那么您可以编写A foo(T t = T())。否则,我建议一个特征类:

template <typename T> struct MyDefaults
{
static const T value = T();
};

template <> struct MyDefaults<int>
{
static const int value = -23;
};


template<class T>
class A
{
public:
A foo(T t = MyDefaults<T>::value);
};

我相信,在类定义中写入常量值仅适用于整数类型,因此对于所有其他类型,您可能必须将其写入外部:

template <> struct MyDefaults<double>
{
static const double value;
};
const double MyDefaults<double>::value = -1.5;

template <> struct MyDefaults<const char *>
{
static const char * const value;
};
const char * const MyDefaults<const char *>::value = "Hello World";

在 C++11 中,您也可以说 static constexpr T value = T(); 使模板适用于非整数值,前提是 T有一个声明为 constexpr:

的默认构造函数
template <typename T> struct MyDefaults
{
static constexpr T value = T();
};

template <> struct MyDefaults<const char *>
{
static constexpr const char * value = "Hello World";
};

关于c++ - 模板类方法的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545917/

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