У меня есть повышающий :: варианта: B неполный типа поэтому у меня есть два possibilitys объявить мой вариантподталкивания :: вариант с эталонным ограниченным типом, не может присвоить значение
typedef boost::variant<B*, char, int> vari; // this works
typedef boost::variant<B&, char, int> vari; // this works also
Но теперь я имеют следующую функцию, в которой я пытаюсь присвоить значение моего варианта:
void setVari(vari& v, const int n){
swich(n) {
case 1 :
vari = 100;
break;
case 2 :
vari = 'a'
break;
case 3 : {
B elem;
vari = elem; // or "vari = *elem" if i use the pointer variant
break;
}
case default :
break;
}
}
Эта функция работает только тогда, когда я использую первый способ заявить свой вариант.
Если я использую ссылочный контент, компилятор жалуется на ошибки template argument deduction/substituiion failed
.
Есть ли возможность использовать эту функцию при использовании ссылки вместо указателя?
Что именно вы пытаетесь достичь? Определение структуры никогда не будет работать. Когда-либо. Я знаю несколько шаблонов с Boost Variant, которые решают практически любую задачу, но я не понимаю, какая задача является вашей целью. (Вместо того, чтобы показывать неудачный подход, опишите цель, которую вы пытаетесь достичь?) – sehe
На данный момент: см. Ограничения на присвоение (перемещение), перечисленные [здесь] (http://www.boost.org/doc/libs/1_57_0/ doc/html/variant/reference.html): _Assignable: сам вариант Assignable, если и только если каждый из его ограниченных типов удовлетворяет требованиям концепции. (Обратите внимание, что типы и типы ссылочных типов верхнего уровня не отвечают этим требованиям.) _ И т. Д. – sehe
Изменен вопрос .. надеюсь, что его теперь более понятно. Может кто-нибудь сказать мне, почему его вниз? Разве все еще не ясно? – Ventu