Boost :: Variant - «нет подходящей функции для вызова» - PullRequest
1 голос
/ 19 марта 2012

Существует множество вопросов, касающихся этой проблемы, но ни один из них, похоже, не является решением моей проблемы. Я не думаю, что это действительно проблема 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 голосов
/ 19 марта 2012

Как отметил Аша в комментарии, вы должны написать:

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

в struct B.

Это необходимо, поскольку параметры шаблона не вычитаются автоматически на основе типа возвращаемого значения (только на основе аргументов).

...