typedef返回模板参数的成员函数类型

时间:2014-06-08 05:58:00

标签: c++ templates metaprogramming

我正在尝试typedef模板参数的成员函数的返回类型。所以像这样:

template <typename T>
class DoSomething{
    typedef return_type (T::*x)(void)const data_type;
    data_type x1;
};

在这种情况下,我想typedef模板参数的const成员函数的返回类型,称为x。在这个示例中,return_type只是一个占位符,只是为了展示我想要的东西。它不会编译。

编辑: 我想这样做的原因是:在这个例子中,我想对x1或任何其他类型data_type的变量进行操作,其精度与x()成员函数的返回类型相同。因此,如果x()返回一个浮点数,我的所有模板操作都将在浮点数中等等。

我在SO上找到了one answer。但我不想使用任何C ++ 11功能。所以没有decltype,没有auto。只是适用于C ++ 03编译器的东西。

3 个答案:

答案 0 :(得分:2)

这似乎有效(即使强制使用Boost Typeof而不是任何C ++ 11或特定于编译器的功能):

#include <boost/utility/declval.hpp>
#include <boost/typeof/typeof.hpp>

template <typename T>
class DoSomething {
    typedef BOOST_TYPEOF_TPL(boost::declval<T const&>().x()) data_type;
    data_type x1;
};

但结果类型不能涉及任何类,结构,联合或枚举类型。

答案 1 :(得分:1)

最简单的方法可能是提升类型,类似于decltype,但在C ++ 03中有效。

答案 2 :(得分:0)

typedef的核心思想如下:

typedef known_type [<modifiers>] new_type;

在这种情况下,known_type应该已经定义并且已知。点。没有其他办法。根据此已知现有类型,您可以定义新类型。

从这开始思考。