使用可变参数模板进行重构
Refactoring using variadic templates
我需要重构给定函数的 3 个版本。每个都有几乎相同的代码,但参数类型不同。
template <typename... Args>
void myfunction(int value, varied_parameter_type param, Args... args) {
... do some work ...
}
其中 varied_parameter_type
是:
- 完全没有参数 (
void
),
- 一个
const char*
,或
- 一个
const my_class*
出于某种原因,我对如何实现这一点一无所知。我目前的想法是声明一个 template<> class 作为 parameter_type 然后相应地专门化它,这样如:
template <typename Type>
class parameter {
public:
Type value
parameter(Type _val) : value(_val) { /* no-op */ }
~parameter(void) = default;
};
template<void> parameter;
template<const char*> parameter;
template<const my_class*> parameter;
有人能给我指出正确的方向吗?网站、白皮书、示例代码等...如有任何帮助,我们将不胜感激。
我决定遵循@Ted Lyngmo 的最初建议,即仅将可变参数作为 Args 的第一个参数...args。我不太喜欢这种方法,但与我尝试使用的其他选项相比,它非常简单。我更希望将 varied_parameter 明确定义为函数调用的一部分,但唉,这会起作用。
而且,正如我所说,与我过度设计的想法相比,这是一个超级简单的解决方案。
我需要重构给定函数的 3 个版本。每个都有几乎相同的代码,但参数类型不同。
template <typename... Args>
void myfunction(int value, varied_parameter_type param, Args... args) {
... do some work ...
}
其中 varied_parameter_type
是:
- 完全没有参数 (
void
), - 一个
const char*
,或 - 一个
const my_class*
出于某种原因,我对如何实现这一点一无所知。我目前的想法是声明一个 template<> class 作为 parameter_type 然后相应地专门化它,这样如:
template <typename Type>
class parameter {
public:
Type value
parameter(Type _val) : value(_val) { /* no-op */ }
~parameter(void) = default;
};
template<void> parameter;
template<const char*> parameter;
template<const my_class*> parameter;
有人能给我指出正确的方向吗?网站、白皮书、示例代码等...如有任何帮助,我们将不胜感激。
我决定遵循@Ted Lyngmo 的最初建议,即仅将可变参数作为 Args 的第一个参数...args。我不太喜欢这种方法,但与我尝试使用的其他选项相比,它非常简单。我更希望将 varied_parameter 明确定义为函数调用的一部分,但唉,这会起作用。
而且,正如我所说,与我过度设计的想法相比,这是一个超级简单的解决方案。