我试图用模板解决一个练习。
我的代码在大多数情况下都能正常工作,但是我发现有一种情况不起作用,这是我的代码的一部分。
默认比较器为

template <typename type1, typename typecomparator=less<typename type1::valuetype1> >
class Myclass
 {
   public:
   Myclass ( const type1 & arg1,const typecomparator & comparator = typecomparator () )
   {
    this->seq=arg1;
    this->comp=comparator;
   }
   ~Myclass ( void ){}
   // ...
   private:
    mutable type1 seq;
    typecomparator comp;
 };


代码几乎在所有情况下都有效。
范例:Myclass <string> test ( "abcabcabc" );

但是当我想使用一个类时:

class another
 {
   public:
                   another ( bool caseSensitive )
                    : m_CaseSensitive ( caseSensitive ) { }
    bool           operator () ( const string & a, const string & b ) const
     {
       return m_CaseSensitive ? strcasecmp ( a . c_str (), b . c_str () ) < 0 : a < b ;
     }
    bool           m_CaseSensitive;
 };

bool upperCaseCompare ( const char & a, const char & b )
 {
   return toupper ( a ) < toupper ( b );
 }


例:

Myclass <list<string>, another> t6 ( list<string>{"foo","done"}, another ( false )) ;


我得到这个错误。

index.cpp: In constructor ‘Myclass<type1, typecomparator>::Myclass(const type1&, const typecomparator&) [with type1 = std::list<std::basic_string<char> >, typecomparator = another]’:
index.cpp:67:136:   instantiated from here
index.cpp:20:4: error: no matching function for call to ‘another::another()’
index.cpp:20:4: note: candidates are:
index.cpp:50:20: note: another::another(bool)
index.cpp:50:20: note:   candidate expects 1 argument, 0 provided
index.cpp:47:7: note: constexpr another::another(const another&)
index.cpp:47:7: note:   candidate expects 1 argument, 0 provided
index.cpp:47:7: note: constexpr another::another(another&&)
index.cpp:47:7: note:   candidate expects 1 argument, 0 provided


我试图重写代码,但是我不明白如何解决此问题。

最佳答案

问题是您没有在构造函数中使用初始化列表,因此MyClass的成员是使用其默认构造函数首先构造的,然后才从参数中复制它们。使用

Myclass ( const type1 & arg1,const typecomparator & comparator = typecomparator () )
 : seq(arg1), comp(comparator)
{
}


并且不再需要another的默认构造函数。

关于c++ - 通用类的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23289935/

10-10 13:52