【问题标题】:Template argument with default type and value具有默认类型和值的模板参数
【发布时间】:2019-01-09 03:51:21
【问题描述】:

我想给模板参数一个默认类型和值。该参数并没有真正使用,它仅与区分类实例有关。我想用这个机制来给班级一把钥匙。

我正在尝试这样的事情,但编译器不喜欢它

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 中区分它们(无论如何都是必需的),使用了额外的键类型。

【问题讨论】:

标签: c++ templates types arguments default


【解决方案1】:

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

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

这里 0 是一个 int,但如果你真的想混淆相同值的不同类型,你也可以分配 (char)0 或其他类型。 :)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多