gpt4 book ai didi

C++ 模板参数引用该模板中定义的类型

转载 作者:行者123 更新时间:2023-11-30 01:08:48 25 4
gpt4 key购买 nike

我有一个模板:

template<typename T, typename U>
struct TemplateClass {
class DefaultU {
T foo;
/* ... */
};
U bar;
T& baz;
/* ... */
};

我想要 U 的默认值成为TemplateClass<T>::DefaultU .

可以服用DefaultUTemplateClass之外, 并将其设为模板,但我认为它属于内部。

这可能吗?

我意识到我所问的含义,当完整写出来时,看起来像这样:

template<typename T>, typename U = TemplateClass<T, TemplateClass<T, TemplateClass<T, ...>::DefaultU>::DefaultU>::DefaultU>
TemplateClass {
/* ... */
}

但也许有一个捷径或解决方法...比如使默认类型(例如 void )我可以检测并替换为 DefaultU根据需要。

最佳答案

Is [it] possible [to refer to a member typedef of a class template within the template parameter list of that template]?

没有。

maybe there's a short-cut or workaround for that... like making the default type something (eg., void)

如果 void 不是 U 可接受的类型(或者如果 void 是一个有效的 U 仅适用于 DefaultU 也是void),那么你确实可以使用它作为默认值,而不是直接使用 U,你可以使用条件成员类型别名:

using u_type = typename std::conditional<std::is_void<U>::value, DefaultU, U>::type;

这允许您在类模板中定义 DefaultU

您可以使用自定义的空“标签”类型作为默认值,而不是 void。这使得条件类型稍微复杂一些。

关于C++ 模板参数引用该模板中定义的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420480/

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