C++ 从外部访问函数中的Typedef

C++ 从外部访问函数中的Typedef,c++,function,c++11,typedef,C++,Function,C++11,Typedef,我正在研究一些与数学相关的对象,我希望能够区分以数学方式表现的运算符。下面是最简单的解决方案,我希望它能以某种方式实现 struct derp { }; derp operator+(derp const & a, derp const & b) { typedef std::true_type commutative; typedef std::true_type associative; return derp(); } void test()

我正在研究一些与数学相关的对象,我希望能够区分以数学方式表现的运算符。下面是最简单的解决方案,我希望它能以某种方式实现

struct derp { };

derp operator+(derp const & a, derp const & b) {
    typedef std::true_type commutative;
    typedef std::true_type associative;

    return derp();
}

void test() {
    typedef int testing;
}


int main(int argc, const char * argv[]) {
    // is it possible to access test::testing or the typedef's in the operator+ from here?

    return 0;
}

这是可能的还是类似的情况?

否。
typedef
s在函数范围内是局部的

提供类似功能的一种方法是定义一个定义所需内容的外部类型(也可以是嵌套类型)

一种可能的方式:

template<typename T>
struct arithmetic_traits
{
    using addition_associate = std::false_type;
    using addition_commutative = std::false_type;
};

template<>
struct arithmetic_traits<derp>
{
    using addition_associate = std::true_type;
    using addition_commutative = std::true_type;
};
模板
结构算术特征
{
使用addition\u associate=std::false\u类型;
使用加法交换=std::false类型;
};
模板
结构算术特征
{
使用addition\u associate=std::true\u type;
使用加法交换=std::true\u类型;
};

您所说的访问是什么意思。typedef实际上并不实例化变量。它几乎定义了一种数据类型,因此没有任何可访问的内容。如果您的意思是希望使用不同的数据类型。我需要访问该类型以进行模板元编程,但您不能,因为
test
不是类。尝试将一个类定义为
test
成员,并将
testing
也定义为
test
之外的成员。另外,表示法
test::testing
不正确(
test
不是一个类)。我知道它不正确,这基本上就是问题所在。我希望一些符号能让我使用在函数中定义的typedefs。scope操作符需要一个名称空间或typename作为左参数。如果您从test函数中获得typedef,那么应该可以通过derp::testing调用它。否则,它将是本地的测试成员函数,阻止您使用范围运算符。