c++ - 模板指定的参数数量

标签 c++ variadic-templates c++17

我有一个类需要根据类模板参数来调整成员 std::function 所采用的参数数量。参数声明如下:

template<char Id, char ... Ids>
class term;

然后在类的主体中,我有一个 std::function ,它需要采用某些数字类型的 1 + sizeof...(Ids) 参数(都是同一类型)。

主体声明如下:

template<char Id, char ... Ids>
class term{
    public:
        template<typename ... Args>
        void operator()(Args &&... args){
            fn(std::forward<Args>(args)...);
        }

        std::function<void(/* whats do? */)> fn;
};

我该如何解决这个问题?

最佳答案

由于您没有说明 fn 的参数类型,我将假设所有 char。在这种情况下:

std::function<void(char, decltype(Ids)...)> fn;

您可以调整它以使参数具有不同的类型,但如何调整它取决于签名的具体外观。

对于所有相同的数字类型,最简单的调整可能是这样的:

std::function<void(char, decltype(Ids, YourNumericType{})...)> fn;

关于c++ - 模板指定的参数数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38289469/

相关文章:

c++ - Google Test中的测试类的构造方法

c++ - 知道使用 std::once_flag 而不调用 std::call_once (任务成功完成后设置once_flag)

c++ - 为什么只有有效的空可变参数包的模板格式错误?

c++ - 具有已知返回值的特定签名生成函数

C++ 缩短后续函数调用

c++ - 二叉树的深拷贝

c++映射范围内的删除

c++ - 可变参数模板 - 不同类型的扩展

c++ - lower_bound() 算法/STL 使用前提条件

c++ - C++ 标准是否允许在没有开销的情况下实现 std::optional<double>