2012-03-19 89 views
1

关于这个问题有很多问题,但他们都不是我的问题的解决方案。我不认为这真的是一个Boost :: Variant问题;我很确定我只是以不正确的方式使用模板。我可以去掉代码,这样你就可以编译它并自己查看问题,这很简单 - 即使它看起来就在那里,我仍然从gcc那里得到一个'no function call'错误。我可能在做一些愚蠢的事情,但我似乎无法看到我做错了什么。Boost :: Variant - “没有匹配的调用函数”

#include <boost/variant.hpp> 

typedef boost::variant<int, std::string> Data; 

struct A 
{ 
    template <typename T> T data() { return boost::get<T>(m_data); }; 
    private: 
     Data m_data; 
}; 

struct B 
{ 
    template <typename T> T data() { return m_a.data(); }; 
    private: 
    A m_a; 
}; 

int main (int argc, char *argv[]) 
{ 
    return 0; 
}; 
+2

不应该是'm_a.data ();'? – Asha 2012-03-19 08:34:03

+0

这段代码本身并不会产生编译器错误(至少在Visual Studio 2010中,但我认为它不会在任何符合的编译器中产生错误)。为了显示错误,你应该在某处调用'B :: data'函数。例如在'main'中添加一个变量'B'并且在其上调用'data' ... – 2012-03-19 08:46:44

回答

0

由于阿莎的评论指出,你应该写:

template <typename T> T data() { return m_a.data<T>(); }; 
struct B

这是必要的,因为模板参数不会根据返回类型(仅基于参数)自动减去。

+1

当我今天早上醒来时,我知道问题是什么问题。这只是我工作方式太多的时间之一,开始犯了一个非常愚蠢的错误。我只是希望这不是一个这么简单的问题,因为我知道的更好。 – Richard 2012-03-19 17:30:39

相关问题