【发布时间】:2019-07-10 21:57:05
【问题描述】:
我将可变参数存储到 std::tuple 内的对象构造函数中,到目前为止一切顺利。但是当使用存储的参数和std::get<>() 调用对象函数时,我将被抛出一个我根本不理解的compile-time 断言失败。这只有在所有参数都不是不同类型时才会发生。
编译器错误信息是:
msvc\14.16.27023\include\tuple(934): 错误 C2338: 重复类型 T in 获取(元组)
下面的mcve:
#include <tuple>
#include <iostream>
using namespace std;
template<class... Args>
struct store_in_tuple {
tuple<Args...> m_tuple_args;
store_in_tuple(Args... args) : m_tuple_args{ args... } {}
void func() {
func_tuple(std::get<Args>(m_tuple_args)...);
}
void func_tuple(Args... args) {}
};
int main(int argc, char** argv) {
store_in_tuple<int, float, double, int> sit1(1, 2.0f, 3.0, 4);
sit1.func(); // <- not ok
store_in_tuple<int, float, double, size_t> sit2(1, 2.0f, 3.0, 4);
sit2.func(); // <- ok
return 0;
}
为什么会发生这种情况,是否有解决方法?
【问题讨论】:
标签: c++ windows c++14 variadic-templates stdtuple