我有一個wrapper
類來包裝std::vector<int>
數據成員。我希望wrapper
的構造函數將其參數轉發給vector<int>
的ctor。我試圖使用可變模板構造函數來實現這一點。由於std::vector<int> v{1, 2, 3}
由其std::initializer_list
構造函數構造,我想wrapper
激活vector
的initializer_list
構造函數,當我做如何使包裝類將其構造函數參數轉發給std :: vector的構造函數?
wrapper mywrap{1, 2, 3}
。
但我沒有得到期望的結果:
#include <iostream>
#include <vector>
struct wrapper {
std::vector<int> v;
template <typename ...Tn> wrapper(Tn ...args) : v(args...) {}
};
int main() {
//----Output----
wrapper wrap1{ 1 };
std::cout << wrap1.v.size() << std::endl; // 1
std::cout << wrap1.v.at(0) << std::endl; // 0
wrapper wrap2{ 1, 2 };
std::cout << wrap2.v.size() << std::endl; // 1
std::cout << wrap2.v.at(0) << std::endl; // 2
wrapper wrap3{ 1, 2, 3 }; // error
wrapper wrap4{ std::initializer_list<int>{ 1, 2, 3 } }; // OK
}
輸出顯示:
wrapper wrap1{ 1 };
電話explicit vector (size_type n);
。
wrapper wrap2{ 1, 2 };
調用
vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());
。
wrapper wrap3
當initializer_list<int>
未指定時失敗。
在任何情況下,我都希望激活vector
的initializer_list<int>
ctor。這怎麼解決?
由於v(args ...)應該是v {args ...},所有的問題和疑問都是存在的。 – ForEveR
@ForEveR讓它成爲答案! –