具有默认类型和值的模板参数
Template argument with default type and value
我想为模板参数提供默认类型和值。该参数并没有真正使用,它只与区分 class 个实例有关。我想使用机械师给 classes 一把钥匙。
我正在尝试类似的操作,但编译器不喜欢它
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
的多个 class DataAction 实例。为了能够在 dynamic_cast 中区分它们,这是无论如何都需要的,使用了额外的键类型。
在 C++17 中,您可以使用 auto 模板参数:
template <typename T, auto = 0>
class DataAction : public Action
{
}
此处 0 是一个 int,但如果您真的想混淆具有相同值的不同类型,您也可以分配 (char)0 或其他类型。 :)
就我个人而言,我更喜欢单一类型并且没有默认值。这避免了旁观者大多数意外的密钥重用和混淆。
我想为模板参数提供默认类型和值。该参数并没有真正使用,它只与区分 class 个实例有关。我想使用机械师给 classes 一把钥匙。
我正在尝试类似的操作,但编译器不喜欢它
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
的多个 class DataAction 实例。为了能够在 dynamic_cast 中区分它们,这是无论如何都需要的,使用了额外的键类型。
在 C++17 中,您可以使用 auto 模板参数:
template <typename T, auto = 0>
class DataAction : public Action
{
}
此处 0 是一个 int,但如果您真的想混淆具有相同值的不同类型,您也可以分配 (char)0 或其他类型。 :)
就我个人而言,我更喜欢单一类型并且没有默认值。这避免了旁观者大多数意外的密钥重用和混淆。