gpt4 book ai didi

c++ - 如何声明模板类成员类型的指针/引用?

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

我希望标题不会离题太远。考虑以下代码:

template<class C>
struct Wrapper {
using type = C;
};

int main()
{
Wrapper<int>::type *a;
Wrapper<int*>::type b;
int i;
Wrapper<int>::type &c = i;
Wrapper<int&>::type d = i;
}

这里,*& 可以进入模板参数,也可以附加到变量名。虽然我认为两种声明方式具有相同的效果,但这只是我的问题:

声明指针/引用的不同方式是否等效,或者是否存在出于某种原因(例如更安全、编译速度更快、风格更好……)其中一种优于另一种的情况?

最佳答案

Are the different ways of declaring pointers/references equivalent or are there situations in which one of them is preferred over the other for whatever reasons (e.g. safer, compiles faster, better style, ...)?

不是首选,但它们实际上可以产生不同的结果。想想部分特化:

template <typename T>
struct Resource_wrapper {
using type = T;
};

template <typename T>
struct Resource_wrapper<T*> {
using type = std::unique_ptr<T>;
};

在这里,写Resource_wrapper<int>::type*有很大区别和 Resource_wrapper<int*>::type .

或者考虑 std::unique_ptr<> ,它也使用部分特化:

std::unique_ptr<int[]> ptr; // smart pointer managing integer array
std::unique_ptr<int> ptr[5]; // array of five integer smart pointers

关于c++ - 如何声明模板类成员类型的指针/引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675095/

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