假設我們有一個維護一組元素的數據結構Foo。應該可以根據需要將屬性與元素相關聯。這些屬性應該分別存儲在一個單獨的向量中。我們通過可變參數模板來實現這一點:如何在同一個可變參數模板的不同實例之間進行轉換?
#include <vector>
template <typename ...Attrs>
struct Foo : public Attrs... {
Foo(int n = 0) {
using PackExpansionT = int[];
PackExpansionT{0, (Attrs::values.resize(n), 0)...};
}
};
struct AttrA { std::vector<int> values; };
struct AttrB { std::vector<float> values; };
struct AttrC { std::vector<double> values; };
int main() {
Foo<AttrA, AttrB> foo; // Maintains set of elements with two attributes each.
};
現在,我想用下面的語義的轉換操作符:
Foo<AttrB, AttrC> bar = foo; // bar.AttrB::values should be a copy of foo.AttrB::values.
這僅僅是一個例子。通常,轉換運算符應該能夠將具有任意屬性的Foo
轉換爲具有任意屬性的另一個Foo。應該複製與Foo
相關的屬性。不與兩者關聯的屬性可以保持默認。但是,我不知道如何實現它。
template <typename ...OthersAttrs>
operator Foo<OthersAttrs...>() const {
// ...?
}
你是做什麼關於與關聯的屬性目標但不是來源? – merlin2011
現在不重要。也許他們的價值被設定爲某種默認值,或許他們的價值是簡單的未定義的。 – user1494080
@ user1494080這是非常重要的:你想從'foo'複製初始化後'bar'是什麼? – Barry