我正在提供一個支持功能欄()的庫。當你傳入一個標量值(比如double,int,whatever)時,它的作用與傳遞非標量值的東西(在所有預期的情況下是用戶定義的類型)不同。所以我寫了這樣的代碼:非內置模板,內置過載模塊
#include <iostream>
class Foo
{
public:
template <class T> void bar(T const &rhs) { std::cout << "T" << std::endl; }
void bar(double rhs) { std::cout << "double" << std::endl; }
};
int main()
{
Foo foo;
foo.bar(4);
}
的問題,這是對主),第二行(。該代碼的結果是「T」的輸出。編譯器比Bar(double)的調用更喜歡模板,我假設這是因爲參數是一個int,它寧願投射到int const &(因爲const &可以引用r值)。
我的問題是「有沒有一種方法可以支持每個標量值而不需要明確地調用它們?」我真的不想調出所有可能的類型,因爲......呃...有很多。我將不得不涵蓋從char到long的所有內容,包括volatile和unsigned的所有組合,等等。
我知道,只是將4改爲4.0的作品,但這是針對圖書館的公共接口,並且要求用戶輸入4.0
而不是4
只是骯髒。
你真的想要所有的標量類型,包括指針類型嗎?如果不是,你正在尋找的單詞是* arithmetic *類型。 – Xeo
好點,我其實只是想要每個C++定義的算術類型;我的術語「標量」在我正在研究的圖書館中更有意義。 – Shirik