根据我之前的帖子,我了解到我不能将函数参数用作编译时构造的参数。这是因为函数的参数是在运行时预期的,但模板参数是在编译时处理的。
由于我很遗憾不能constexpr
在参数上使用,我决定使用模板参数。它工作正常,但就外观而言,我不会说它是最好的选择:
#include <tuple>
template <class... Args>
struct type_list
{
std::tuple<Args...> var;
type_list(Args&&... args) : var(std::forward<Args>(args)...) {}
template <std::size_t N>
auto operator[](std::size_t)
-> typename std::tuple_element<N, std::tuple<Args...>>::type&&
{
return std::move(std::get<N>(var));
}
};
int main()
{
type_list<int, int, bool> list(2, 4, true);
int i = list.operator[]<0>(0); // How can I avoid this?
}
有什么办法可以避免这种情况吗?如何在避免显式运算符语法的同时为函数提供常量表达式?可以用宏吗?