【发布时间】:2020-07-13 03:23:22
【问题描述】:
我有这个代码:
#include <tuple>
#include <memory>
template <typename ...Args>
class Button
{
Button(const std::string& name, Args&& ...args) {
std::tuple<Args...> tuple_ = std::tuple<Args...>(args...);
}
};
template<typename T1, typename ...Args>
void addObject(const std::string& name, Args&& ...args) {
std::unique_ptr<T1> obj(new T1(name, std::forward<Args>(args)...));
//...rest of the code...
}
int main() {
//if we comment the next line it compiles well
addObject<Button>("BtnName", 0, 1, 2);
return 0;
}
但是,它不会在编译时出现“错误 LNK2019:无法解析的外部符号...”或“没有匹配函数调用 'addObject 类按钮>(const char [8], int, int, int)'等错误”。如果我们注释“addObject”函数,它编译得很好。
如何以正确的方式将args传递给另一个模板?
【问题讨论】:
-
这里
Button不是类型;这是一个模板。由于它本身不是一种类型,因此将其作为typename参数传递是没有意义的。将main中的行更改为addObject<Button<int, int int.>>("BtnName", 0, 1, 2);有帮助吗?显然它并不理想(因为你需要使用templatetemplate参数,我现在没有时间写一个完整的答案),但如果这有帮助它会给你一个地方开始。
标签: c++ templates c++17 variadic-templates