写完了很多std::shared_ptr<myNs::MyClass>
之后
我希望指针可以写成:
MyClass* rawPtr = new MyClass(); // raw pointer
MyClass@ refPtr = @(new MyClass()); // std::shared_ptr
MyClass# gcPtr = #(new MyClass()); // GC pointer, for future
所以功能:
void CRAIIMFCApplication1View::ConsumeThreadResult(
std::vector<std::shared_ptr<ThreadParam> > threadParamsVecPtr,
std::shared_ptr<CalculationResult> calculationResultPtr)
{
...
}
可以很快写成:
void CRAIIMFCApplication1View::ConsumeThreadResult(
std::vector<ThreadParam@> threadParamsVecPtr,
CalculationResult@ calculationResultPtr)
{
...
}
这样做有诀窍吗?
====================== Update1 ===================== ====
非常感谢@tahsmith。
现在我使用以下typedef
template<typename T> using $ = std::shared_ptr<T>;
template<typename T> using vector$ = std::vector<std::shared_ptr<T> >;
代码可以写成:
void CRAIIMFCApplication1View::ConsumeThreadResult(
vector$<ThreadParam> threadParamPtrVec,
$<CalculationResult> calculationResultPtr)
{
...
}
答案 0 :(得分:0)
std::shared_ptr
是(标准)库组件,您建议将@
作为C ++功能。使用库组件的功能是一种编程语言的未充分利用的设计!
方便的是,可以始终使用typedef
或using
来区分用户定义的类型。 e.g。
template<typename T> using Ptr = std::shared_ptr<T>;
template<typename T> using Ptrs = std::vector<std::shared_ptr<T> >; // or PtrVec
使用非$
之类的非字母数字符号不是一个好主意。