所以当我有这样的代码时:
shared_ptr<Foo> bar (my_normal_operator<Foo>(mumble));
即使该类型Foo
来自左侧字段,它也可以作为返回类型仅通过给定内容的“加法”模式产生:
template <typename Target, typename Source>
shared_ptr<Target> my_normal_operator(Source src)
{
/* ... whatever ... */
}
但是,如果情况看起来像这样:
shared_ptr<Foo> bar (my_pointer_operator<Foo*>(mumble));
它需要某种方法将指针从类型中拉出。我四处挖掘并找到了std::remove_pointer,但是一个天真的应用程序给出了“类型/值不匹配”:
template <typename Target, typename Source>
shared_ptr< std::remove_pointer<Target>::type > my_pointer_operator(Source src)
{
/* ... whatever ... */
}
我实际上没想到它会起作用......但我把它放在这里是为了表达我正在寻找的意图!
叹。每次我踏入任何带有模板和特征的新领域时,我都会觉得自己是那些“我不知道自己在做什么”的模因动物之一。:-/