c++ - 确定模板参数是否为指针

标签 c++ pointers templates heap-memory stack-memory

假设我们有模板类

template <typename T>
class MyTem{
public:
    bool is_T_Pointer(){
        <...>
    }
};
class Cls : MyTem<Cls>{
    <...>
};
int main(void){
    Cls* classOnHeap = new Cls(); /* T is pointer */
    Cls classOnStack; /* T is not pointer */
    <...>
}

我知道这是一个糟糕的例子,但如果有人能帮我查明 T 是否是来自模板类的指针,那就太好了。

请记住,我们继承了与基类相同的类模板。

不必完全实现,一个模糊的技术就足够了

最佳答案

你应该在这里使用偏特化:

template<class T>
class A
{
public:
    A() {}
};

template<class T>
class A<T*>
{
public:
    A(int) {}
};

那么下面的代码将无法编译,因为编译器被迫选择模板的指针版本并且没有默认构造函数:

A<char*> a;

这会编译:

A<char> a;

关于c++ - 确定模板参数是否为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898864/

相关文章:

c++ - 调用模板化基类方法编译失败

c# - 有什么方法可以修改 Visual Studio 模板中的现有文件?

C++解构指针数组

pointers - 在golang中使用指针进行多次分配和创建

c++ - 通过引用 C++ 传递 double

c++ - 如何获取函数返回类型的模板成员的取消引用类型

c++ - string.c_str() 需要解除分配吗?

c++ - 安装opencv后如何安装OpenCV_contrib模块

c++ - 是否有使用unicode字符串文件路径进行fopen的标准方法?

c++ - std::copy 如何与流迭代器一起工作