gpt4 book ai didi

c++ - 模板类可以在不指定其模板参数两次的情况下为自己起别名吗?

转载 作者:行者123 更新时间:2023-12-04 14:51:59 25 4
gpt4 key购买 nike

我正在尝试定义一个具有许多参数的新类模板。为了编写一些方法(例如重载运算符),我想为模板类类型起别名。现在我是这样做的:

template <class T, int a, int b, int c, int d, int e, int f>
class ExampleClass {

using ExampleClassType = ExampleClass<T, a, b, c, d, e, f>;

// for example,
ExampleClassType operator+(const ExampleClassType& rhs) {
// ...
}

};

这种方法似乎是多余的,因为我将模板参数列表写了两次。有没有更好的办法?我天真地尝试过

using ExampleClassType = decltype(*this);

但这行不通,我认为因为 this 在编译时是未知的。

如果这是一个重复的问题,我深表歉意,我尝试搜索但没有找到具体的内容。

最佳答案

实际上你可以只使用 ExampleClass以此目的。它叫做 injected class name在类定义中,您可以使用它,它将隐式成为完全实例化的类。

例子:

#include <iostream>

template<class T, int a>
struct ExampleClass
{
ExampleClass operator+(const ExampleClass& t_rhs) const { std::cout << a << '\n'; return *this; }
};


int main(int argc, char** argv){
ExampleClass<int, 7> myClass;
auto foo = myClass + myClass;
}

参见 on godbolt .

这将输出 7因为在我的operator+ , ExampleClass实际上用作注入(inject)的类名,意思是 ExampleClass<int, 7> .

关于c++ - 模板类可以在不指定其模板参数两次的情况下为自己起别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68926188/

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