我想创建一个具有 3 个值的结构:一个字符串和两个整数。该字符串是必需的,但其中一个(或两个)整数是可选的,如果未指定,则可以默认为 -1。
然而,与其使用结构,我想我会尝试一个 std::tuple。为了合并两个整数的可选性,我设置了一个继承自 std::tuple 的“Trio”类,如下所示:
#include <string>
#include <tuple>
class Trio : public std::tuple<std::string, int, int>
{
public:
explicit Trio(std::string const & name, int val1 = -1, int val2 = -1)
:
tuple(name, val1, val2)
{
}
};
然后我通过将一些 Trio 对象推入 std::vector 来测试 Trio 类:
#include <vector>
int main(void)
{
std::vector<Trio> trios;
Trio trio("trio1", 1, 1);
trios.push_back(trio);
return 0;
}
它在 Visual Studio 2010 中给了我以下错误:
>c:\program files (x86)\microsoft visual studio 10.0\vc\include\tuple(127):
error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const
std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1
from 'const Trio' to 'const std::basic_string<_Elem,_Traits,_Ax> &'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
Reason: cannot convert from 'const Trio' to 'const
std::basic_string<_Elem,_Traits,_Ax>'
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Ax=std::allocator<char>
]
No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
有谁明白我在这里做错了什么?有什么我没有看到的明显的东西吗?我是不是严重滥用了 std::tuple 的使用?
谢谢,
亚伦