【发布时间】:2020-12-12 10:52:01
【问题描述】:
我在使用 boost::variant 时遇到问题(使用 boost 1.67.0)。
当我的模板参数列表同时包含 bool 和 std::string 时,任何应该被视为字符串的变体对象似乎都隐式绑定到 bool。例如:
using Varval = boost::variant<bool, std::string>;
void main()
{
std::vector<Varval> vect{ true, false, "Hello_World" };
std::cout << "[ ";
for (const auto &v : vect)
std::cout << v << " ";
std::cout << "]\n";
}
输出:
[1 0 1]
而如果我只更改第一个模板参数,从 bool 到 int,它工作正常:
using Varval = boost::variant<int, std::string>;
void main()
{
std::vector<Varval> vect{ true, false, "Hello_World" };
std::cout << "[ ";
for (const auto &v : vect)
std::cout << v << " ";
std::cout << "]\n";
}
正确输出:
[1 0 Hello_World]
有什么想法吗?
【问题讨论】:
-
“Hello_World”不是
string。它是const char* -
“Hello_World”不是
const char*,而是char[12]