gpt4 book ai didi

c++ - 在类声明之前在模板内进行 `using` 声明

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:03 25 4
gpt4 key购买 nike

假设我有以下代码:

template<typename X, typename Y, typename Z>
class Foo : public Parent<SomeComplicatedExpressionInvolving<X,Y,Z>> {
using Useful = SomeComplicatedExpressionInvolving<X,Y,Z>;

Useful member;
Useful another_member;
Useful f(Useful x) { return x; } // etc.
};

Useful 声明在这里很有用,因为它允许我们编写 Useful 来代替一些非常长的表达式。

是否可以进一步整理并将 using 声明放在类声明之前?显然,以下代码无法编译:

template<typename X, typename Y, typename Z>
using Useful = SomeComplicatedExpressionInvolving<X,Y,Z>
class Foo : public Parent<Useful> {
Useful member;
Useful another_member;
Useful f(Useful x) { return x; } // etc.
};

但是有没有办法写一些这样的东西呢?以这种方式进行多个 using 声明可能很有用(即在模板范围内但在类声明之前)。

最佳答案

我认为这不是一个好主意(AndyG 的解决方案 +1)但是...只是为了好玩...您可以使用具有默认值的模板类型而不是 using

举例

template <typename, typename, typename>
struct SomeComplicatedExpressionInvolving
{ };

template <typename>
struct Parent
{ };

template <typename X, typename Y, typename Z,
typename Useful = Parent<SomeComplicatedExpressionInvolving<X,Y,Z>>>
class Foo : public Useful
{
Useful member;
Useful another_member;
Useful f(Useful x) { return x; } // etc.
};

int main ()
{
Foo<int, long, int> f;
}

关于c++ - 在类声明之前在模板内进行 `using` 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985946/

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