テンプレート クラスのメソッドにデフォルトのパラメータ値を提供する方法はありますか? たとえば、次のものがあります。
template<class T>
class A
{
public:
A foo(T t);
};
foo
タイプのデフォルトパラメータを与えるには、これをどのように変更すればよいT
ですか? 例:T
はint
デフォルト値の -23、またはデフォルト値はT
などです。これは可能ですか?char*
"something"
テンプレート クラスのメソッドにデフォルトのパラメータ値を提供する方法はありますか? たとえば、次のものがあります。
template<class T>
class A
{
public:
A foo(T t);
};
foo
タイプのデフォルトパラメータを与えるには、これをどのように変更すればよいT
ですか? 例:T
はint
デフォルト値の -23、またはデフォルト値はT
などです。これは可能ですか?char*
"something"
デフォルトのパラメーターをデフォルト値 (通常はゼロ) にしたい場合は、次のように記述できますA foo(T t = T())
。それ以外の場合は、トレイト クラスをお勧めします。
template <typename T> struct MyDefaults
{
static const T value = T();
};
template <> struct MyDefaults<int>
{
static const int value = -23;
};
template<class T>
class A
{
public:
A foo(T t = MyDefaults<T>::value);
};
クラス定義内に定数値を記述することは、整数型に対してのみ機能すると私は信じているので、他のすべての型に対しては外側に記述する必要があるかもしれません:
template <> struct MyDefaults<double>
{
static const double value;
};
const double MyDefaults<double>::value = -1.5;
template <> struct MyDefaults<const char *>
{
static const char * const value;
};
const char * const MyDefaults<const char *>::value = "Hello World";
C++11 では、次のように宣言されたデフォルト コンストラクターがある場合static constexpr T value = T();
、非整数値に対してテンプレートを機能させるように指定することもできます。T
constexpr
template <typename T> struct MyDefaults
{
static constexpr T value = T();
};
template <> struct MyDefaults<const char *>
{
static constexpr const char * value = "Hello World";
};