나는 잠시 동안 boost::variant
을 이미 사용하고 있습니다. 그러나 여전히 의문의 여지가 남아 있습니다. 나는 std::pair<int, int>
boost::variant
A를 저장하려고 해요로 다음 코드는 컴파일되지타입이 boost :: variant에 저장 될 수있는지를 추론하십시오.
, 그에만 int
, double
및 std::string
를 포함 할 수 있습니다. 여전히 convert
함수가 필요하지만 적합하지 않게 형식을 boost::variant
에 저장하려고 할 때 예외가 발생합니다.
#include <iostream>
#include <boost/variant.hpp>
#include <vector>
typedef boost::variant<int, double, std::string> TVar;
template<typename T>
std::vector<TVar> convert(const std::vector<T>& vec) {
std::vector<TVar> ret;
for (size_t t = 0; t < vec.size(); t++) {
ret.push_back(vec[t]);
}
return ret;
}
int main(int arg, char** args) {
{
std::vector<double> v = { 3,6,4,3 };
auto ret=convert(v);
std::cout << ret.size() << std::endl;
}
{
std::vector<bool> v = { true, false, true };
auto ret=convert(v);
std::cout << ret.size() << std::endl;
}
{
std::vector<std::pair<int, int>> v = { std::make_pair<int, int>(5,4) };
auto ret = convert(v);
std::cout << ret.size() << std::endl;
}
return 0;
}
것 같다, 그 std::enable_if
솔루션의 일부가 될 수도 있지만, 나는 끝이를 가져올 수 없습니다. 나는 std::pair<int, int>
boost::variant
A를 저장하려고 해요로 다음 코드는 컴파일되지
안녕하세요. 이 멋진 솔루션을 찾아 주셔서 감사드립니다. 불행히도, 그것은 나를 위해 올바른 행동을하지 못했습니다. 나는 항상'convert (...)'함수의 두 번째 부분에 빠져있다. 프로그램은 '0'을 세 번 출력합니다. – Aleph0
@FrankSimon 죄송합니다,이 버그를 눈치 채지 못했습니다 :) 이제는 작동하지만보기에는 좋지 않습니다 ... – Rakete1111
와우. 그게 정말 저에게 기운이납니다. 불행히도, MSVC 2015와 컴파일되지 않습니다? 그것은 :'오류 C2275 : "TVar": 표현식으로 형식의 사용이 잘못되었습니다 .' 어떤 생각이 들었습니까? – Aleph0