This question already has answers here:
C++ : Vector of template class
(4个答案)
9个月前关闭。
我正在尝试创建一个支持整数和浮点数的数据类型,并在构造过程中推断出该类型。
下面的代码可以编译,但是我想对其进行修改,以使3条注释行可以编译。
这在C ++ 98中可能吗?
编辑:
我只希望能够将结果存储在向量中,结果类型将具有名称和值。该值可以是int或float。除此之外,我并不真正在乎该类的定义或实例化方式。
请注意,在您的示例中,第二个插入具有
如果需要存储其他类型,请查看
(4个答案)
9个月前关闭。
我正在尝试创建一个支持整数和浮点数的数据类型,并在构造过程中推断出该类型。
下面的代码可以编译,但是我想对其进行修改,以使3条注释行可以编译。
这在C ++ 98中可能吗?
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Result
{
public:
Result(std::string name, T value) : m_name(name), m_value(value) { }
private:
std::string m_name;
T m_value;
};
int main()
{
Result<double> hello(std::string("Test"), 123.45);
//std::vector<Result> results;
//results.push_back(Result("Test Int", 32));
//results.push_back(Result("Test Double", 42.1));
return 0;
}
编辑:
我只希望能够将结果存储在向量中,结果类型将具有名称和值。该值可以是int或float。除此之外,我并不真正在乎该类的定义或实例化方式。
最佳答案
由于在C ++ 98中不支持template argument deduction,因此这是不可能的。
从现在开始考虑C ++ 17:
同样在这里,编译器无法推断Result
中std::vector<Result> results;
的模板参数。这样是不可能的。试想一下这条线-您怎么可能能够推断出没有任何价值的任何类型呢?
但是,如果您知道是否要提前将哪些元素插入向量(或至少是第一个元素),则可以让编译器通过调用以下内容来推导出所有参数:
std::vector results { Result("Test Int", 32) };
请注意,在您的示例中,第二个插入具有
double
类型(与上面的int
相比),因此您将无法将其推入向量中。如果需要存储其他类型,请查看
std::variant
或std::any
(但这是另一回事)。关于c++ - 简单数据类型中的模板类型推导,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55296765/