2016-07-07 9 views
-1

對於POD連的std :: string升壓變型對我的作品,但是當我嘗試我的用戶類型A,它沒有這個代碼:爲什麼升壓變拋出異常時,模板參數不-POD?

#include "stdafx.h" 
#include <boost/variant/variant.hpp> 
#include <boost/variant/get.hpp> 

struct A 
{ 
    char ch; 
}; 

int main() 
{ 
    boost::variant< int, A > n, a; 
    n = 33; 
    a = 'a'; 

    try 
    { 
    int nn = boost::get<int>(n); // ok 
    auto aa = boost::get<A>(a); // throws bad_get 
    } 
    catch(boost::bad_get&) 
    { 
    bool okay = false; 
    } 

    return 0; 
} 

這是爲什麼?

+6

哪種類型的,你認爲'一個=「a''選秀權?提示:你可以不寫'一A = 'A';'。 –

回答

2

你的第二個例子實際上持有另一個int,因爲char可以轉換爲int。要構建Achar你可以做a = A{'a'};,將調用默認的構造函數的一個你的類型(集合初始化吧?我不知道到底),然後會初始化你variantA

相關問題