我正在尝试使用 C++ 可变参数模板解压缩变量类型的参数列表,我将如何删除以下人工示例中的“T”对象:
struct Test
{
template <typename T, typename... Args>
void foo(T t, int i, Args... args) { foo(t, args...); }
template <typename T, typename... Args>
void foo(T t, double d, Args... args) { foo(t, args...); }
template <typename T>
void foo(T t) { }
};
struct DummyObject { };
然后像这样执行:
DummyObject dummy;
Test test;
test.foo(dummy, 4, 5.0, 6, 7.0, 8.0, 9);
我想完全消除传入“虚拟”对象的需要,我只是想不出在这种情况下最终的“foo”函数应该是什么样子。
最佳答案
让我稍微充实一下您的样本:
struct Test
{
template <typename T, typename... Args>
void foo(T t, int i, Args... args) { doIThing(i); foo(t, args...); }
template <typename T, typename... Args>
void foo(T t, double d, Args... args) { doDThing(d); foo(t, args...); }
template <typename T>
void foo(T t) { }
};
因此有两个函数执行实际工作:doIThing
和 doDThing
。你 99% 都答对了,只需...删除 T。
struct Test
{
template <typename... Args>
void foo(int i, Args... args) { doIThing(i); foo(args...); }
template <typename... Args>
void foo(double d, Args... args) { doDThing(d); foo(args...); }
void foo() { }
};
关于c++ - 可变参数 C++ 模板解压后终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315813/