2

我的模板类 A 包含一个调用模板类的静态函数的函数:

template <typename T>
void A<T>::fun() {
    T obj = T::create();
    ....
}

如果我希望此代码在 T = B* 时工作,我应该如何修改它?我知道我不能做 (*T)::create(),但从概念上讲,这就是我想要的。

4

1 回答 1

5

您可以使用std::remove_pointer类型特征:

#include <type_traits>

template <typename T>
void A<T>::fun() {
    T obj = std::remove_pointer<T>::type::create();
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    // ...
}

两者兼而有之。std::remove_pointer<U*>::type_std::remove_pointer<U>::typeU

于 2013-06-02T13:22:22.190 回答