我希望能够通过任意数量的参数调用一个函数,每个参数的值由另一个函数提供:
template <typename T, std::size_t N>
class MyClass
{
public:
void doSomething()
{
doSomethingProxy(std::make_index_sequence<N>());
}
private:
template <std::size_t... I>
void doSomethingProxy(std::index_sequence<I...>)
{
m_obj.doSomething({get()...}); // T::doSomething() expects an object whose constructor has N number of arguments, and I would like to call the get() function for each argument of said constructor, N times
}
int get() { return 0; }
T m_obj{};
};
但是,执行上述操作会导致错误
error: expansion pattern get() contains no parameter packs
我认为问题是get()...
不依赖于I
,但我不确定如何解决这个问题。
1条答案
按热度按时间rhfm7lfc1#
(I,get())
使用参数包,结果为get()
(逗号运算符,计算两个操作数,返回rhs)。要使有关逗号运算符的lhs无效的警告静音,您可能需要编写((void)I,get())
: