假設我有一個模板函數foo(),它將兩個整數引用作爲參數。我希望模板函數也可以自動處理常量引用(例如來自常量的引用)。這是一個通用的例子。我可以讓foo()工作,但是我必須爲每個參考/常量參考參數的排列提供一個新的實現。C++模板:使用const&爲常量參數自動重載模板化函數?
#include <iostream>
using namespace std;
template<typename A, typename B>
void foo(A& a, B& b)
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
template<typename A, typename B>
void foo(A& a, const B& b)
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
template<typename A, typename B>
void foo(const A& a, B& b)
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
template<typename A, typename B>
void foo(const A& a, const B& b)
{
cout<<"a:"<<a<<" b:"<<b<<endl;
}
int main()
{
int x = 0;
foo(x, x);
foo(x, 10);
foo(10, x);
foo(20, 20);
return 0;
}
上面的例子是有點人爲的,但它是我試圖做的一般化。在我更復雜的情況下,我有一個類作爲一組參數的包裝。類構造函數是模板化的,就像foo()一樣,並且可以有多達10個參數。枚舉所有2^10個可能的構造函數將是一場噩夢。
我自我承認不是專家,但這個問題聽起來與完美的轉發有很大的關係(排列是一個不那麼細微的提示)。一個非常穩固的討論是在[這個問題]的主角 - 答案(http://stackoverflow.com/questions/3582001/advantages-of-using-forward),很值得你看看。 – WhozCraig