具有默认类型和值的模板参数

时间:2018-08-01 14:14:47

标签: c++ templates types arguments default

我想给模板参数一个默认的类型和值。该参数并未真正使用,仅与区分类实例有关。我想使用机制为课程提供一个关键。

我正在尝试类似的操作,但是编译器不喜欢

template<typename K = int>
template<typename T, K Key = K(0)>
class DataAction : public Action
{
    // ...
};

类型T为我保留数据。类型Key具有一定的价值,可以轻松使用enum class类型,如果未分配,则应默认为int 0

以下将起作用。

template<typename T, typename K = int, K Key = K(0)>
class DataAction : public Action

但这要求我先定义类型,然后定义值,这不好。

auto instance = DatatAction<int, SomeEnumType, SomeEnumType::SomeKey>();

其目的是用户可能希望使用具有相同数据类型T的DataAction的多个类实例。为了能够在dynamic_cast中区分它们(无论如何还是必需的),使用了附加的密钥类型。

1 个答案:

答案 0 :(得分:1)

在C ++ 17中,您可以使用 auto 模板参数:

template <typename T, auto = 0>
class DataAction : public Action
{
}

这里0是一个整数,但是如果您确实想混淆具有相同值的不同类型,也可以分配(char)0或其他类型。 :)

就我个人而言,我更喜欢一种类型,并且没有默认值。这避免了旁观者大多数意外的键重用和混乱。