是否可以使用decltype来确定前向声明的模板类的成员函数的返回类型?

时间:2014-05-10 17:18:53

标签: c++ c++11

我有一个我已经声明的类,我希望能够在头文件中找出该类的成员函数的返回类型,该文件无法访问该定义。我可以做这样的事情而只包括我的标题中的前向变换吗?如果标题可以访问定义,则可以使用一个示例,但我希望避免在头文件中包含这些定义:

// file name Matrix.hpp
#include<utility>
#include "array.hpp" // I would like to remove this include

template<typename T, unsigned int N>
class Array;

using MatrixD = Array<double, 2>; 
using return_type = decltype(std::decval<MatrixD>().operator()("i,j"));

class Array_User{
public:
    virtual return_type Array_op(const std::string);
    ... Rest of class 
};

2 个答案:

答案 0 :(得分:1)

没有。该类型必须是完整的并且在那时知道。

答案 1 :(得分:1)

前向声明表示您知道类(或类模板)存在,而不是包含。由此,显然无法获得有关任何成员的信息,包括成员函数。