1

この問題に関して多くの質問がありますが、どれも私の問題の解決策ではないようです。これは本当に 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;
};
4

1 に答える 1

0

Asha がコメントで指摘したように、次のように書く必要があります。

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

struct B

テンプレート パラメーターは戻り値の型に基づいて自動的に推定されないため (引数のみに基づいて)、これが必要です。

于 2012-03-19T08:41:54.980 に答える