提升::变体 - "调用没有匹配函数"

Boost::Variant - "no matching function for call"

本文关键字:函数 调用 变体 提升      更新时间:2023-10-16

关于这个问题有很多问题,但似乎没有一个能解决我的问题。我不认为这真的是一个Boost::变体问题;我很确定我只是以不正确的方式使用模板。我能够精简代码,这样你就可以编译它,自己看看问题所在,这很简单——我一直收到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;
};

正如Asha在评论中指出的那样,您应该写:

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

在CCD_ 1中。

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