有没有办法在非模板类中定义模板成员#2
Is there a way to define a template member in a non-template class? #2
我有一个模板类class_A
:
// class_A.h
#pragma once
#include <iostream>
#include <tuple>
template <class T>
class class_A
{
public:
class_A(){}
T Function_A(T parameter)
{
return parameter;
}
};
我正试图在非模板类class_B
中用作私有成员:
// class_B.h
#pragma once
#include <tuple>
#include <iostream>
#include "class_A.h"
class class_B
{
public:
class_B();
template <typename T> T Evaluate(T parameter);
private:
std::tuple<class_A<double>, class_A<char> > As;
};
和
// class_B.cc
#include "class_B.h"
class_B::class_B(){}
template <typename T>
T class_B::Evaluate(T parameter)
{
return std::get<class_A<T>>(As).Function_A(parameter); //This is causing error
//return parameter // This works
}
template double class_B::Evaluate(double parameter);
template char class_B::Evaluate(char parameter);
我的main.cc
是:
// main.cc
#include<iostream>
#include <string>
#include "class_B.h"
using namespace std;
int main()
{
class_B B;
std::cout<< B.Evaluate(5.2) <<std::endl;
std::cout << B.Evaluate('h') << std::endl;
return 0;
}
我得到以下错误:
src/class_B.cc:8:12: error: no matching function for call to 'get'
return std::get<class_A<T>>(As).Evaluate(parameter);
.
.
.
etc.
这是一个答案的试验:https://stackoverflow.com/a/55357742/9203360这并不奏效,但如果真的奏效了,那就太理想了。
正如我在评论中提到的,std::get
的重载将一个类型作为模板参数并返回该类型的元组元素,只有在C++14之后才可用。
根据您的注释,您不是根据C++14或更高版本进行编译的,因此没有与std::get
匹配的类型作为第一个模板参数。
std::get<class_A<T>>(As(
获取class_A的实例,因此无法调用Evaluate方法,该方法不存在。您应该调用方法Function_A,或者在类_A 中定义Evaluate方法
return std::get<class_A<T>>(As).Function_A(parameter); // Call Function_A
它适用于Visual Studio 2015-Windows平台10.0.17763.0
另外,std::get
需要c++14才能工作。
相关文章:
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- C++令牌定义成员
- 在没有类定义的标头中定义成员变量
- 如何在类的构造函数中定义成员向量的大小
- 如何在C++中动态定义成员函数
- C++ Boost.Serialization - 用户定义成员的非侵入式序列化
- C++类 - 使用公共变量并在类外定义成员函数
- G++ - 对已定义成员函数的未定义引用
- 在哪里以及如何定义成员变量?在头文件还是实现文件中?
- 是否可以修改STL并自定义成员函数
- 从 boost::mpl:vector 类型列表中定义成员变量
- 在构造对象时定义成员函数
- 为什么定义成员函数指针变量需要类名
- 复制构造函数中的 C++ 用户定义成员
- 如何根据类参数定义成员类运算符
- 使用指向未定义成员函数的指针时的未定义引用
- 如何在运行时定义成员数组大小
- C++-在模板类之外但在头中定义成员函数
- c++在不知道对象类型的情况下定义成员函数指针
- 在特定偏移量中定义成员的结构