0

テンプレート クラスのメソッドにデフォルトのパラメータ値を提供する方法はありますか? たとえば、次のものがあります。

template<class T>
class A
{
public:
    A foo(T t);
};

fooタイプのデフォルトパラメータを与えるには、これをどのように変更すればよいTですか? 例:Tintデフォルト値の -23、またはデフォルト値はTなどです。これは可能ですか?char*"something"

4

1 に答える 1

3

デフォルトのパラメーターをデフォルト値 (通常はゼロ) にしたい場合は、次のように記述できます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();、非整数値に対してテンプレートを機能させるように指定することもできます。Tconstexpr

template <typename T> struct MyDefaults
{
  static constexpr T value = T();
};

template <> struct MyDefaults<const char *>
{
  static constexpr const char * value = "Hello World";
};
于 2011-09-25T13:56:43.730 に答える