func(10) と func(10) で呼び出される関数を分ける
例えば、こんな感じに『引数から型推論を行う関数』を呼び出す時に『テンプレート型を明示的に定義したかどうか』で呼び出される関数を別々にしたい場合があります。
template<typename T> void func(T&& t); // func(10) と func<int>(10) で呼び出す関数を別々にしたい func(10); func<int>(10);
これ、どうやればいいのかなーと考えていたらこんな感じで出来るみたい。
[ソース]
#include <type_traits> #include <iostream> template<typename T> void func(T t){ std::cout << "non template" << std::endl; } template<typename T> void func(typename std::common_type<T>::type t){ std::cout << "template" << std::endl; } int main(){ int n = 10; func(n); func(10); func(0.25f); func<int>(n); func<int>(10); func<float>(n); func<float>(10); func<float>(0.25f); return 0; }
[出力]
non template non template non template template template template template template
久々に目からうろこだわ。