gpt4 book ai didi

c++ - 是否可以在固定 namespace 下解析模板类型?

转载 作者:行者123 更新时间:2023-11-28 04:30:06 25 4
gpt4 key购买 nike

给定以下类型:

struct Object {
using NestedAlias = bool;
};

namespace Hidden {
struct Object {
using NestedAlias = bool;
};
}

我知道可以从模板的命名空间解析类型。

template <typename Type>
void legal(Type type) {
using Alias = typename Type::NestedAlias;
}

legal(Object{});

但是,当模板类型在解析运算符的右侧而左侧是 namespace 时,我无法解析。可能吗?

template <typename Type>
void illegal(Type type) {
using Alias = Hidden::Type;
using Alias = Hidden::decltype(Type);
using Alias = typename Hidden::Type;
using Alias = typename Hidden::decltype(Type);
}

对于那些想知道用例是什么的人:

template <typename Type>
void double_object_use_case(Type type) {
Hidden::Type hidden_type;
operation_on_both_types(type, hidden_type);
}

可玩的 Godbolt 链接:https://godbolt.org/z/LRNK0b

最佳答案

模板不适用于名称,但适用于类型(或值)。

目前,使用名称的唯一方法是 MACRO。

另一种方法是添加隐藏类型作为别名:

  • 在类里面:

    namespace Hidden {
    struct Object {
    using NestedAlias = bool;
    };
    }

    struct Object {
    using NestedAlias = bool;

    using Hidden = Hidden::Object;
    };

    template <typename Type>
    void double_object_use_case(Type type) {
    typename Type::Hidden hidden_type;
    operation_on_both_types(type, hidden_type);
    }
  • 作为特征:

    struct Object {
    using NestedAlias = bool;
    };

    namespace Hidden {
    template <typename> struct Traits;

    template <>
    Traits<Object> {
    using NestedAlias = bool;
    };
    }

    template <typename Type>
    void double_object_use_case(Type type) {
    typename Hidden::Traits<Type> hidden_type;
    operation_on_both_types(type, hidden_type);
    }

关于c++ - 是否可以在固定 namespace 下解析模板类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53184456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com