使用可变参数模板进行重构

Refactoring using variadic templates

我需要重构给定函数的 3 个版本。每个都有几乎相同的代码,但参数类型不同。

template <typename... Args>
void myfunction(int value, varied_parameter_type param, Args... args) {
  ... do some work ...
}

其中 varied_parameter_type 是:

出于某种原因,我对如何实现这一点一无所知。我目前的想法是声明一个 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 明确定义为函数调用的一部分,但唉,这会起作用。

而且,正如我所说,与我过度设计的想法相比,这是一个超级简单的解决方案。