关于这个问题有很多问题,但他们都不是我的问题的解决方案。我不认为这真的是一个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;
};
不应该是'm_a.data();'? –
Asha
2012-03-19 08:34:03
这段代码本身并不会产生编译器错误(至少在Visual Studio 2010中,但我认为它不会在任何符合的编译器中产生错误)。为了显示错误,你应该在某处调用'B :: data'函数。例如在'main'中添加一个变量'B'并且在其上调用'data' ... – 2012-03-19 08:46:44