2015-12-19 20 views
3

或者在匿名嵌套的外部結構/類中。 (< - 要添加到標題,而不再延長)。我想要能夠簡單地調用一個函數,並獲得正在使用的聯合的成員(通過任何方式,例如返回它,修改參數等),而不是類型(或者標識符類型),但是實際的成員,或者它的非空指針。有沒有辦法在現代(C++ 14)C++中做到這一點?使用其中的函數返回聯合的活動成員

+2

您不能這樣做。此信息未被存儲。 –

+0

您可以通過僅允許設置者修改聯盟的成員來存儲它。 (註冊傳入的類型)。 –

+2

你看看'boost :: variant'和'static_visitor'嗎? – Jarod42

回答

1

隨着boost::variant,當前值/類型被存儲。您可以在變體上應用static_visitor,例如:

#include "boost/variant.hpp" 
#include <iostream> 

class times_two_visitor : public boost::static_visitor<> 
{ 
public: 

    void operator()(int & i) const 
    { 
     i *= 2; 
    } 

    void operator()(std::string & str) const 
    { 
     str += str; 
    } 
}; 


int main() 
{ 
    boost::variant<int, std::string> u("hello world"); 
    std::cout << u; // output: hello world 

    boost::apply_visitor(times_two_visitor(), u); 
    std::cout << u; // output: hello worldhello world 
    u = 21; 
    boost::apply_visitor(times_two_visitor(), u); 
    std::cout << u; // output: 42 
} 
相關問題