Optional Template parameter

后端 未结 2 891
夕颜
夕颜 2020-12-15 04:24

Is it possible to have optional template parameter in C++ , for example

template < class T, class U, class V>
class Test {
};

Here I

相关标签:
2条回答
  • 2020-12-15 04:51

    You can have default template arguments, which are sufficient for your purposes:

    template<class T, class U = T, class V = U>
    class Test
    { };
    

    Now the following work:

    Test<int> a;           // Test<int, int, int>
    Test<double, float> b; // Test<double, float, float>
    
    0 讨论(0)
  • 2020-12-15 04:59

    Sure, you can have default template parameters:

    template <typename T, typename U, typename V = U>
    
    template <typename T, typename U = int, typename V = std::vector<U> >
    

    The standard library does this all the time -- most containers take two to five parameters! For example, unordered_map is actually:

    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;
    

    Typicall you just use it as std::unordered_map<std::string, double> without giving it any further thought.

    0 讨论(0)
提交回复
热议问题