[問題] 如何限定template可以接的型別
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
G++ 4.7
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NO
問題(Question):
為了需要, 我重載的 operator+
我希望這個程式可以接任意 callable type (普通函數, function object 例如
std::function, lambda, ...)
不過我不知道要怎麼做這個限制, 讓不符合這個限制的不要用我這個重載函式,
而去呼叫其他內建的之類
程式碼(Code):(請善用置底文網頁, 記得排版)
嘗試:
template<typename F, typename G, class =
typename enable_if<is_same<typename result_of<F(int)>::type,
typename result_of<G(int)>::type>::value,
bool>::type>
bool operator+(F a, G b) {
return a(5) == b(5);
}
不過若 F, G 不能被呼叫, 在 result_of 那邊會 compile error 而不是用其他內建的
重載函式
這樣甚至會讓人沒辦法正常的使用原先的 + (或 iterator 的 + 之類)
這邊只是小段的, 實際上重載的程式更有意義
這樣做只是不想要每次寫個 lambda 時都要額外再用 std::function 包起來
不然原先 operator+ 重載的型態都是 std::function
另外也嘗試過 is_function, 不過查了資料還是不會用
(而且好像只能判直接的函式型態)
希望板上前輩不吝賜教, 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.59.110
推
05/22 01:33, , 1F
05/22 01:33, 1F
→
05/22 01:34, , 2F
05/22 01:34, 2F
→
05/22 01:34, , 3F
05/22 01:34, 3F
→
05/22 09:27, , 4F
05/22 09:27, 4F
→
05/22 09:29, , 5F
05/22 09:29, 5F
→
05/22 09:31, , 6F
05/22 09:31, 6F
→
05/22 09:56, , 7F
05/22 09:56, 7F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章