したがって、関数 f が与えられた場合、いくつかのマクロ foo を使用せずに、特定の個別の無関係なクラスの特定の動作を定義する方法があります。
例:と同じことを達成するための代替/方法:
//p for param
template<typename T>
T f(T p){ // some default op};
template<>
T f<float>(T p)
{ return 2*p; }
template<>
T f<double>(T p)
{ return 2*p; }
template<>
T f<int>(T p)
{ return 2*p; }
template<>
T f<std::string>(T p)
{ //return p copies of the string appended together; }
template<>
T f<std::vector>(T p)
{ //return the vector's element's copied}
// etc
いいえ、通常のオーバーロードは好きではありません。理想的にはテンプレートのようなもの
if T in [int, float, double]
T f(T p) { return 2*p; }
else // デフォルトのその他の動作を定義します。Pythonでできること。
とにかく、Tのクラスに基づいて決定を下すには?私が考えることができる可能な解決策は、非常に...かなりではありませんが、typeidとデマングリングを使用することです。
何らかの理由で、スーパージェネリック関数と約 15 の異なるクラスがあり、オーバーロードを使用するすべてがきれいではないと書いているとします。