【问题标题】:Access Typedef in Function From Outside从外部访问函数中的 Typedef
【发布时间】:2014-03-26 21:39:49
【问题描述】:

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

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 实际上并不实例化变量。它几乎定义了一种数据类型,因此没有任何东西可以访问。如果你的意思是你想使用那些不同的数据类型。
  • 我需要访问该类型以进行模板元编程
  • 不,你不能因为test 不是一个类。尝试定义一个以test 作为成员并且testing 也作为成员但在test 之外的类。符号test::testing 也不正确(test 不是一个类)。
  • 我知道这是不对的,这基本上就是问题所在。我希望一些符号可以让我使用在函数中定义的 typedefs
  • 作用域运算符需要命名空间或类型名作为左参数。如果您从测试函数中获取 typedef,则应该可以通过 derp::testing 调用它。否则它将是测试成员函数的本地,阻止您使用范围运算符。

标签: c++ function c++11 typedef


【解决方案1】:

没有。函数内的typedefs 在函数范围内是本地的。

提供类似功能的一种方法是定义一个外部类型(也可以是嵌套类型)来定义您想要的。

一种可能的方式:

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;
};

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2013-02-23
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多