Boost :: Variant - “没有匹配的呼叫功能”

时间:2012-03-19 08:23:17

标签: c++ templates boost-variant

关于这个问题有很多问题,但它们似乎都没有解决我的问题。我不认为这真的是一个Boost :: Variant问题;我很确定我只是以错误的方式使用模板。我能够删除代码,以便你可以编译它并自己查看问题,这很简单 - 我一直从gcc得到一个'无函数调用'错误,即使它似乎就在那里。我可能做了一些愚蠢的事情,但我似乎无法看到我做错了什么。

#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;
};

1 个答案:

答案 0 :(得分:0)

Asha在评论中指出,你应该写:

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

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