gpt4 book ai didi

c++ - 从模板类调用可变参数函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:08 24 4
gpt4 key购买 nike

我有一个带有可变模板成员函数的模板类,我无法从类外部调用它。这是我正在尝试做的一个简化示例:

template<typename T>
struct foo{
foo(){}

template<int... I>
int run(){
return sizeof...(I); // or whatever
}
};

template<int... I>
int run_int(){
return foo<int>().run<I...>(); // OK
}

template<typename T, int... I>
int run_T(){
return foo<T>().run<I...>(); // error
}

当 foo 被专门化时,我可以毫无问题地调用它的模板成员函数 run()。但是,如果我尝试从不特化 foo 的函数或结构中调用它,gcc(4.7) 会发出错误消息“参数包未使用‘...’扩展”。我用 clang (3.1) 尝试了同样的事情,但得到了类似的错误(“错误:表达式包含未扩展的参数包‘I’”)。

谁能帮我理解为什么最后一个函数编译失败?现在我可以通过使“int...I”成为 foo 本身的非类型参数来绕过它,然后从外部这样调用它:

 foo<T, I...>().run()

但我仍然不明白为什么它不以另一种方式编译。

最佳答案

去收集代表...

foo<T>().template run<I...>();

参见 Where and why do I have to put the "template" and "typename" keywords?为什么需要模板关键字。

关于c++ - 从模板类调用可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9971173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com