C++ 可变参数模板,使用值而不是类型名

问题描述 投票:0回答:1

在 C++ 中,是否有某种等效的可变参数模板,使用 values 而不是类型名或类?

在模板类的方法内,其想法是使用实例声明中指定的值,而不通过构造函数。

可能是这样的(尚未找到正确的语法):

template <class T, "some variadic value syntax...">
class Sample
{
public:
    T val() { return T("some variadic value syntax..."); }
};

Sample <std::string> a;            // a.val() returns ""
Sample <std::string, "foo"> b;     // b.val() returns "foo"
Sample <std::string, 4, 'a'> c;    // c.val() returns "aaaa"

目前,相当于通过预处理宏来完成,我想消除这些宏并用模板替换。

欢迎任何其他想法,只要:

  • 它不使用宏,
  • 它最多使用 C++17,但不更新,
  • 无需将值传递给构造函数,
  • 我们不将值存储在对象实例中,
  • 该对象的构造函数可能尚未被调用(尚未初始化的模块内的静态对象),
  • 允许任意数量的值,包括零。
c++ variadic-templates
1个回答
1
投票

您可以使用占位符类型

auto
,如下所示。请注意,当前 C++ 中不允许字符串文字作为模板参数。

template <class T, auto...>
class Sample
{
public:
    T val() { return T("some variadic value syntax..."); }
};
© www.soinside.com 2019 - 2024. All rights reserved.