gpt4 book ai didi

c++ - 如何简化复杂的模板声明

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:50 26 4
gpt4 key购买 nike

例如,我想简化 std::tr1::shared_pointer 模板类。我想要一个 std::tr1::shared_pointer 的别名。

但这行不通:

#include <tr1/memory>

template <class T>
class SharedPointer : public std::tr1::shared_ptr<T>
{
};

int main(int argc, char *argv[])
{
SharedPointer<int> test(new int(5));
return 0;
}

因为构造函数不是继承的。

有解决这个问题的模式吗?

最佳答案

如果你想给它起别名,using声明将创建一个真正的别名,而不是一个子类:

template<class T>
using SharedPointer = std::tr1::shared_ptr<T>;

编辑

应该在 GCC 4.6.* 编译器上工作的方法是围绕 std::tr1::shared_ptr<T> 创建一个包装函数。 .由于 GCC 4.6.* 支持 C++11 库,我用它代替 TR1:

#include <memory>
#include <utility>

template<typename T, typename... Args>
std::shared_ptr<T> make_shared_ptr(Args &&... args)
{
return std::shared_ptr<T>(std::forward<Args>(args)...);
}

int main(int argc, char *argv[])
{
auto test = make_shared_ptr<int>(new int(5));
return 0;
}

关于c++ - 如何简化复杂的模板声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808260/

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