[英]How exactly can I overload the '{' operator?
要初始化 std::vector,我可以直接使用 initializer_list,如下所示:
std::vector<int> myVec = {1, 2, 3, 4};
如果我創建一個自定義列表類(它將包含許多項目),例如class customVector
(為了簡單起見,僅使用整數,我想我可以自己弄清楚如何使用模板,如果需要的話),我可以重載運算符 '{' 以這樣一種方式可以在同一件事中初始化customVector
的實例嗎? 這樣我就可以寫
customVector myCustomVec = {1, 2, 3, 4}
你可以完成你最終想要的,但不能通過重載任何運算符—— {
不是運算符。
vector
通過使用一個帶initializer_list
參數的構造函數來做到這一點,你可以對你的類做同樣的事情。
學習如何做並實施它作為練習。
您不能,因為{
不是運算符。 在C++20
,以下運算符是可覆蓋的:
+ - * / % ^ & | ~ ! =
< > += -= *= /= %= ^= &= |= <<
>> >>= <<= == != <= >= && || ++ --
, ->* -> () []
C++20
添加了飛船操作符<=>
但我相信就是這樣。
正如其他人指出的那樣, {
不是運算符。 但是,您仍然可以根據需要使用初始化列表。 它是標准庫的一部分。
#include <iostream>
#include <initializer_list>
using namespace std;
template <typename T>
struct customVector {
customVector(std::initializer_list<T> list) : size(list.size()) {
arr = new T[size];
int count = 0;
for(auto val: list) arr[count++] = val;
}
T* arr;
std::size_t size;
~customVector() {
for(int i = 0; i < size; i++)
std::cout << arr[i] << std::endl;
delete [] arr;
}
};
int main() {
customVector<int> myCustomVec = {1, 2, 3, 4};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.