我有一個類型爲boost :: variant的std :: vector,它包含指向標準內置類型的指針。在std :: vector中設置包含指針的boost :: variant
在代碼
std::vector<boost::variant<int *, double *> > bv;
bv.resize(2);
int n = 42;
bv[0] = &n;
double d = 102.4;
bv[1] = &d;
這種運作良好,我可以通過使用boost::get<int *>
或boost::get<double *>
訪問矢量中的值。
但是,我想知道是否可以直接在向量中設置元素的值,而不是將其指向引用。換句話說,我想做這樣的事情
*bv[0] = 42;
*bv[1] = 102.4;
但這不能編譯。有沒有人有關於如何去解決這個問題的建議?
謝謝。
編輯:
很顯然,我沒有足夠的積分,回答我的問題,所以想我應該把我的解決方案在原來的問題,而不是。希望這可以幫助那些在這個頁面上絆倒的人。
我想我會回答我自己的問題,以防萬一有人幫助。我寫了一個訪問者類,它修改了變體中指針的含義。這是訪問者類的代碼(當然,這可以作爲模板類)。
class specific_visitor : public boost::static_visitor<>
{
public:
explicit specific_visitor(int i) : i_num(i) { }
explicit specific_visitor(double d) : d_num(d) { }
void operator()(int * i) const
{
*i = i_num;
}
void operator()(double * d) const
{
*d = d_num;
}
private:
int i_num;
double d_num;
};
爲了使用它在原來的問題變種的載體,這裏的代碼:
int i_num = 34;
boost::apply_visitor(specific_visitor(i_num), bv[0]);
double d_num = 9.81;
boost::apply_visitor(specific_visitor(d_num), bv[1]);
爲什麼在這裏首先使用指針? – 2012-02-08 17:50:14
好吧,我正在嘗試將boost :: variant集成到一個更大的程序中,不幸的是,這是我現在唯一現實的選擇。 – endbegin 2012-02-08 17:53:46
@endbegin:那對我沒有意義。爲什麼'std :: vector>'使它不現實? –
kennytm
2012-02-08 17:55:22