3
或者在匿名嵌套的外部結構/類中。 (< - 要添加到標題,而不再延長)。我想要能夠簡單地調用一個函數,並獲得正在使用的聯合的成員(通過任何方式,例如返回它,修改參數等),而不是類型(或者標識符類型),但是實際的成員,或者它的非空指針。有沒有辦法在現代(C++ 14)C++中做到這一點?使用其中的函數返回聯合的活動成員
或者在匿名嵌套的外部結構/類中。 (< - 要添加到標題,而不再延長)。我想要能夠簡單地調用一個函數,並獲得正在使用的聯合的成員(通過任何方式,例如返回它,修改參數等),而不是類型(或者標識符類型),但是實際的成員,或者它的非空指針。有沒有辦法在現代(C++ 14)C++中做到這一點?使用其中的函數返回聯合的活動成員
隨着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
}
您不能這樣做。此信息未被存儲。 –
您可以通過僅允許設置者修改聯盟的成員來存儲它。 (註冊傳入的類型)。 –
你看看'boost :: variant'和'static_visitor'嗎? – Jarod42