在看到可以为引用或指针类型部分特化模板后,我想知道是否可以编写一个仅接受指针类型的模板。以下是我的尝试:
template <typename T*>
struct MyTemplate{};
int main() {
MyTemplate<int *> c;
(void)c;
return 0;
}
这段代码无法编译。如果我的目的是可行的,应该如何修改它?
在看到可以为引用或指针类型部分特化模板后,我想知道是否可以编写一个仅接受指针类型的模板。以下是我的尝试:
template <typename T*>
struct MyTemplate{};
int main() {
MyTemplate<int *> c;
(void)c;
return 0;
}
您可以使用部分特化:
template <typename T> struct MyTemplate; // Declaration
template <typename T> struct MyTemplate<T*> // Specialization
{
};
static_assert
。template <typename T> struct MyTemplate
{
static_assert(std::is_pointer<T>::value, "Expected a pointer");
// T = value_type*
using value_type = std::remove_pointer_t<T>;
};
template <typename T>
requires (std::is_pointer_v<T>)
struct MyTemplate
{
};
std::is_pointer
。 - πάντα ῥεῖ