回答
如果您正在尋找使用內置運算符進行元編程:這種事情是不可能的 - 內置運算符對運行時值進行操作,而不是對編譯時值進行操作。
您可以使用boost::mpl
是什麼,以及而不是使用內置的運營商,利用其模板,如at
爲op[]
,plus<a, b>
爲op+
等
int main() {
using boost::mpl::vector;
using boost::mpl::at_c;
using boost::mpl::plus;
using boost::mpl::int_;
typedef vector<int, bool, char, float> Class_1;
typedef vector< int_<1>, int_<2> > Numeric_1;
at_c<Class_1, 0>::type six = 6;
typedef plus<at_c<Numeric_1, 0>::type
,at_c<Numeric_1, 1>::type>::type r;
int i3[r::value] = { 4, 5, 6 };
return ((i3[0] + i3[1] + i3[2]) * six) == 90;
}
如果你指的是運營商的一類工作,這是沒有意義的號,這就像在int
或double
說operator +
可以操作。運算符是函數的語法糖,它們操作的是變量(值)而不是類型。
如果你有某種工具類 - 只有靜態成員 - 將某些東西加載到「自己」,然後你想以最簡單的方式訪問 - 使用像'[]'這樣的運算符,這是有意義的。 – 2015-08-26 12:59:23
是的,添加到@ jave.web的評論:它肯定可以在情況下有意義*當類的靜態範圍*中有數據時。 (OP也明確地提到了靜態作用域。)因此,不是像在你的例子中那樣使用簡單的算術,而是像[],(),<<, >>等東西可能對任何類型的複雜管理類都是完美的語法糖。 ,而不會強制單例實例。 – 2015-11-29 19:37:47
我不相信這是可能的,但我可能在這方面是錯誤的。我想問你爲什麼要這麼做。而不是在類上而不是在實例上執行操作,也許你只需要在整個應用程序中使用一個實例?在這種情況下,您應該使用the singleton pattern。
我曾經使用單身模式像瘋了一樣,但後來因爲單身代碼編寫測試是一件麻煩事而停下來。 – jameszhao00 2009-09-08 01:46:48
不,操作員不能是類的靜態成員。改用常規的靜態函數。
- 1. 爲什麼C#運算符重載必須是靜態的?
- 2. C++:運算符重載,運算符+
- 3. C++運算符在已重載的運算符中重載
- 4. 運算符重載C++ - 重載輸出「<<」運算符
- 5. 運算符重載C++
- 6. 運算符重載C++
- 7. 運算符重載C++
- 8. C++重載運算符[]
- 9. C++運算符重載==
- 10. 運算符重載:C++
- 11. 運算符重載c == isEqual
- 12. 運算符重載(C++)
- 13. C++約運算符重載
- 14. C++不重載運算符
- 15. 重載運算符== C++
- 16. C++&Java - 重載運算符
- 17. +運算符重載在C++
- 18. 運算符重載C++
- 19. C++運算符重載
- 20. C++運算符重載[]
- 21. istream運算符重載C++
- 22. 重載[] []在C++運算符
- 23. C++重載:重載[] []運算符
- 24. C++靜態數組和sizeof運算符
- 25. 爲靜態類重載ostream <<運算符?
- 26. 運算符重載 - 爲什麼靜態解析?
- 27. 任何重載的運算符()的靜態檢測
- 28. Groovy重載靜態getAt(下標)運算符
- 29. 運算符重載 - 重載*
- 30. C#字符串運算符重載
應該'Class_1 [VAL]'產量類型?你希望做'Class_1 [val] v;'嗎? – 2009-09-07 19:08:00
我打算讓它產生整數值,但類型很好。 – jameszhao00 2009-09-07 19:17:09
在C++中,類型不能在類型系統中表示(只有'std :: type_id'),我想不出任何可以靜態重載的操作符。我建議,不要問你的實現思想在C++中是否可行,而是提出實際的_problem_這是要解決的問題。有人可能會提出一個可行的實施方案。 – sbi 2009-09-07 21:05:16