我正在尝试将大量基本相同但采用不同数量参数的类转换为单个模板类。所以我创建了一个模板类示例(不是真正的代码 - 仅作为示例):
// The template type
template<typename... Args>
class tester_template
{
public:
void process(Args... args)
{
// Create a vector to put the args into. use double since that can hold all of the types
// that I am using (well enough for me anyway). But I get a lot of "narrowing" warnings
// this is understandable, but I want to have no warnings (some sort of cast on a
// parameter pack??)
std::vector<double> args_vect = {args...};
for (auto arg : args_vect)
{
std::cout << arg << " ";
}
std::cout << std::endl;
};
};
我这样运行:
// Same with one template class
tester_template<double> template1;
tester_template<int, int> template2;
tester_template<int, int, int> template3;
tester_template<float> template4;
tester_template<float, double, int> template5;
template1.process(1.123); // ok
template2.process(2, 2); // Warnings
template3.process(3, 2, 3); // Warnings
template4.process(4.4f); // Warnings
template5.process(5.5f, 2.234, 3); // Warnings
此处包含警告的完整示例以及模板类替换的先前许多类的示例:https ://rextester.com/RBEA68379
所以我理解错误/警告消息(基本上,如果我转换,我可能会丢失数据)。但我想抑制警告 - 也许通过强制转换。但是我不知道如何使用参数包来做到这一点 - 也许我错过了它,但我没有在网上找到它。
我猜有两个问题:
- 我可以将其投射(或其他不会关闭警告的方法)吗?
- 我只是想将参数包提取到我可以迭代的结构中,我在做什么是明智的,还是有更好的方法?