[英]Templated member function call g++ error : no matching function for call
g ++在該示例上遇到錯誤。
我有一個包含std::string
的類Option
從Option
繼承的OptionValue
,具有模板類型和密鑰的std::string
類型的模板化參數。
OptionManager
在std::map<std::string, Option*>
管理OptionValue
, OptionManager
具有成員函數create
:
template <typename T, std::string & key>
void create(const T & value);
如果我不調用g ++,請不要抱怨:
OptionManager *manager = new OptionManager;
manager->create<int, "my_key">(3);
g ++不喜歡create
調用,這是錯誤: no matching function for call to OptionManager::create(int)
如果有人可以通過給我看路來幫助我,我非常感謝他! :)
這是代碼:
Option.hpp
class Option
{
public:
Option(std::string & key) :
key_(key)
{}
virtual ~Option()
{}
protected:
std::string key_;
};
OptionValue.hpp
template <typename T, std::string & key>
class OptionValue : public Option
{
public:
OptionValue<T, key>(T val) :
Option(key),
val_(val)
{}
virtual ~OptionValue()
{}
private:
T val_;
};
OptionManager.hpp
class OptionManager
{
public:
OptionManager(){}
~OptionManager(){}
template <typename T, std::string & key>
void create(const T & value)
{
Option *tmp;
tmp = new OptionValue<T, key>(value);
this->list_.insert(t_pair(key, tmp));
}
private:
std::map<std::string, Option*> list_;
typedef std::map<std::string, Option*>::iterator t_iter;
typedef std::pair<std::string, Option*> t_pair;
};
main.cpp
int main()
{
OptionManager *manager;
manager = new OptionManager;
manager->create<int, "my_key">(3);
return 0;
}
g ++錯誤
main.cpp: In function ‘int main()’:
main.cpp:8:35: error: no matching function for call to ‘OptionManager::create(int)’
main.cpp:8:35: note: candidate is:
OptionManager.hpp:14:12: note: template<class T, std::string& key> void OptionManager::create(const T&)
您的第二個模板參數的類型為std::string &
。 您不能使用一個臨時對象(例如,通過將字符串文字轉換為std::string
創建的對象)初始化該對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.