C 确定模板变量是类还是内置类型

C++ determine if templated variable is a class or just a built in type?

本文关键字:内置 置类型 变量      更新时间:2023-10-16

问题:我正在尝试明确调用灾难,但是

int a;
class b;
b.~class(); // This works.
a.~int();   // This doesn't.

我的代码已模板,因此我需要一种方法来找出它们是否给我的基本类型。

示例:

if(!basetype<Class>())
{
    classInst.~Class();
}

可能的解决方案:我可以部分模板基本类型,因此它没有称为Destructor,我只是在寻找一种更简单的方式。也许C 有一个内置操作员,我不知道大声笑。

ps:我爱你。

我的代码:

template<typename DestroyClass>
void HeapAllocator::destroy(HeapPointer<DestroyClass>& object)
{
    //object->DestroyClass::~DestroyClass();
    // Maintaining linked list references
    HeapPointer<EMPTY>* prevIndex = (HeapPointer<EMPTY>*)object.prev;
    HeapPointer<EMPTY>* nextIndex = (HeapPointer<EMPTY>*)object.next;
    if(prevIndex != 0)
        prevIndex->next = (U8*)nextIndex;
    else
        indexerStart = (U8*)nextIndex;  
    if(nextIndex != 0)
        nextIndex->prev = (U8*)prevIndex;
    else{
        indexerEnd = (U8*)prevIndex;
        if(prevIndex != 0)
            allocatorTop = prevIndex->end;
        else
            allocatorTop = heapBottom;
    }

    // Nullifying object so it can be overwritten
    object.start = 0;
    object.end = 0;
    object.alignment = 0;
    object.prev = 0;
    object.next = 0;
}

c 具有一个特殊的规则,即在模板中调用模板参数类型的破坏者,甚至适用于内置类型。该规则是使写作模板更容易。因此,虽然int x; x.~int()不会编译,但T t; t.~T()在模板中T = int会编译并无能为力。