我正在尝试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编译器的东西。
答案 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
应该已经定义并且已知。点。没有其他办法。根据此已知现有类型,您可以定义新类型。
从这开始思考。