たとえば、C++でオプションのテンプレートパラメータを使用することは可能ですか?
template < class T, class U, class V>
class Test {
};
ここで、ユーザーにこのクラスをV
ありまたはV
なしで使用してもらいたい
以下は可能ですか
Test<int,int,int> WithAllParameter
Test<int,int> WithOneMissing
はいの場合、これを行う方法。
デフォルトテンプレート引数を持つことができます。これは目的に十分です。
template<class T, class U = T, class V = U>
class Test
{ };
今、次の仕事:
Test<int> a; // Test<int, int, int>
Test<double, float> b; // Test<double, float, float>
もちろん、デフォルトのテンプレートパラメータを設定できます。
template <typename T, typename U, typename V = U>
template <typename T, typename U = int, typename V = std::vector<U> >
標準ライブラリはこれを常に行います-ほとんどのコンテナは2から5のパラメータを取ります!たとえば、unordered_map
は実際には次のとおりです。
template<
class Key, // needed, key type
class T, // needed, mapped type
class Hash = std::hash<Key>, // hash functor, defaults to std::hash<Key>
class KeyEqual = std::equal_to<Key>, // comparator, defaults to Key::operator==()
class Allocator = std::allocator<std::pair<const Key, T>> // allocator, defaults to std::allocator
> class unordered_map;
通常は、これ以上考えずにstd::unordered_map<std::string, double>
として使用します。