Я хочу создать template< typename F > using T = boost::variant< F, F const >;
тип для хранения доступных для чтения и чтения-записи доступных значений в том же std::vector<T>
. Но у меня есть следующая проблема программирования:boost :: variant of const и non-const
#include <iostream>
#include <cstdlib>
#include <boost/variant.hpp>
int main()
{
using F = double;
using CV = boost::variant< F const, F >;
F const c = 0.0;
CV C(c);
F v = 0.0;
CV V(v);
std::cout << C.which() << ' ' << V.which() << std::endl;
return EXIT_SUCCESS;
}
Выход: 1 1
. Как сохранить версию const
значения типа F
?
Прежде всего, вам лучше понять __why __... затем искать решение. Я немного копаю в кишки «boost :: variant» и обнаруживаю, что для инициализации этих разных вариантов правильный инициализатор называется (например, 'const' и non-'const'), но он возвращает недопустимый индекс для параметра' const'. 'index' является частью типа инициализатора, который, очевидно, имеет некоторую ошибку (или, может быть, функцию) ... так что вам лучше вникать в' boost :: detail :: variant :: make_initializer_node' кишки для ответа (это вокруг строки 111 boost/variant/detail/initializer.hpp) – zaufi
@zaufi Я попробую. Но это кажется слишком трудным для понимания. – Orient
чтение (и понимание) код, написанный другими, - это ** очень полезное умение в любом случае ... используйте свой шанс его развить! :)) – zaufi