Для типа Foo
, который я хочу использовать в boost::variant
, я хотел установить конструктор по умолчанию private
, так как это только должно быть позволено быть созвано boost::variant
.повышение :: вариант в другом классе
К сожалению, я еще не мог понять, в декларации магии boost::variant
и просто объявить
struct Foo {
private:
Foo();
template <class T1, class T2>
friend class boost::variant<T1, T2>;
};
не компилировать либо. Есть ли способ сделать это или мне нужно сохранить Foo()
public
?
Я думаю, что это нет никакой гарантии, что код инстанцирования является 'повышением :: сам variant', а не один из его помощников. Но я не смотрел на реализацию. Возможно, это часть документального интерфейса. –
@ Cheersandhth.-Alf Хорошая точка. Я ответил на вопрос «как подружиться с boost :: variant», «не более широким», как использовать частный ctor с «boost :: variant». Я оставлю его в ОП, чтобы выяснить, работает ли он на них или нет; Я желаю быть превзойденным лучшим ответом и/или вывести мои, если окажется, что этого недостаточно. – Angew
Я проверил, что 'boost :: variant' выполняет экземпляр, прежде чем :). Тем не менее, предложение, по крайней мере, выдает синтаксическую ошибку на VS2010 в идентификаторе 'BOOST_PP_REPEAT_1_class'. – abergmeier