這個問題在這里已經有了答案: 是否可以獲得內置標準運算子的函式指標? (2 個回答) 6 小時前關閉。
例如,我想根據分配給 (in ) 的模板來控制A
操作B
符main
。
// Theoretical operation template function
template <OPERATION>
void Example(int A, int B) {
A OPERATION B;
}
int main(void) {
Example< = >(10, 20);
Example< -= >(10, 20);
Example< *= >(10, 20);
Example< |= >(10, 20);
}
我知道這不是有效的 C 語法,但我這樣做只是為了解釋。這可能嗎?提前致謝。
uj5u.com熱心網友回復:
您可以對操作進行模板化Example
,并將操作作為第三個引數傳遞。傳遞操作的一種簡單方法是作為 lambda,或者正如上面@Yksisarvinen 評論的那樣,作為std::functional
.
下面的示例使用算術運算子而不是邏輯運算子(您似乎想在問題的標題中使用邏輯運算子,但在您的示例中使用算術運算子)。
[演示]
#include <functional> // plus, minus, multiplies, divides
#include <iostream> // cout
template <typename Op>
void Example(int a, int b, Op&& op) {
std::cout << "result = " << op(a, b) << "\n";
}
int main(void) {
Example(10, 20, std::plus<int>{});
Example(10, 20, std::minus<int>{});
Example(10, 20, [](int a, int b) { return a * b; }); // or multiplies
Example(10, 20, [](int a, int b) { return a / b; }); // or divides
}
// Outputs:
//
// result = 30
// result = -10
// result = 200
// result = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470837.html