c++ - 对不同类型使用具有不同返回值的模板函数不起作用

标签 c++ templates return-type

所以我写了类似的东西:

class MyClass
{
    enum varType {INTEGER, DOUBLE, VECTOR};

    int beautiful_integer;
    double awesome_double;
    std::vector<float> many_floats;

    template <class T>
      T getVariable(varType type)
      {
          if(type == INTEGER)
          {
             return beatiful_integer;
          }
          if(type == DOUBLE)
          {
             return awesome_double;
          }
          if(type == VECTOR)
          {
             return many_floats;
          }
      }

...

};

但是我的编译器抛出错误“In instantiation of ...”并且基本上告诉我返回类型不匹配(并列出所有不匹配的,除了正确的)然后尝试用另一个实例化它类型(例如 double)并告诉我返回类型与 float 的 int 和 vector 不匹配。

我做错了什么以及如何正确编写模板函数以便根据调用它的参数返回不同的类型。例如当我打电话时:

MyClass some_class(); //EDIT: this should be MyClass some_class; 
                      //thanks for pointing it out
int some_number = some_class.getVariable(INTEGER);

我想将beautiful_integer的值赋给some_number

最佳答案

作为替代方案,使用 std:

template <class T>
const T& getVariable() const
{
    return std::get<const T&>(std::tie(beautiful_integer, awesome_double, many_floats));
}

template <class T>
T& getVariable()
{
    return std::get<T&>(std::tie(beautiful_integer, awesome_double, many_floats));
}

关于c++ - 对不同类型使用具有不同返回值的模板函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218490/

相关文章:

mysql - 如何获取存储过程结果集到其他存储过程。或者在 MySQL 的函数中返回表

C++20 从带括号的值列表初始化聚合,不支持内部数组

c++ - 为什么在 C++11 中流仍然转换为指针?

c++ - 如何让模板模板参数取一个数值?

javascript - 替换 JavaScript 模板中相同值的多个实例

c++ - 使用模板重载运算符,但防止重新定义

java - 如何根据条件返回 json 响应并重定向到其他 View ?

c++ - 在 MPI 进程之间交换数据(晕)

c++ - 参数前的 const 与函数名后的 const C++

java - 变量声明: why interface