gpt4 book ai didi

c++ - 测试传递给函数的 void* 是 shared_ptr 还是 unique_ptr

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:49 26 4
gpt4 key购买 nike

我正在为一个类创建一个函数,参数被声明为 void* 但是在函数中我需要测试这个 void* 是 shared_ptr 还是 unique_ptr 有没有办法测试这种类型的情况?

这是我目前正在使用的;我的类是模板类型,不存储任何成员变量。它有一个默认构造函数,也可以通过传入 shared_ptr<Type> 来构造。或 unique_ptr<Type>它有多个 allocate()他们从事相同类型工作的职能。

#ifndef ALLOCATOR_H
#define ALLOCATOR_H

#include <memory>
#include <iostream>

template<class Type>
class Allocator {
public:
Allocator(){}
Allocator( Type type, void* pPtr );
Allocator( std::shared_ptr<Type>& pType );
Allocator( std::unique_ptr<Type>& pType );
// ~Allocator(); // Default Okay

void allocate( std::shared_ptr<Type>& pType );
void allocate( std::unique_ptr<Type>& pType );
void allocate( Type type, void* pPtr );

private:
Allocator( const Allocator& c ); // Not Implemented
Allocator& operator=( const Allocator& c ); // Not Implemented

}; // Allocator

#include "Allocator.inl"

#endif // ALLOCATOR_H

我的 *.cpp文件只有 #include "Allocator.h"因为所有的实现都在我的 *.inl 中文件。

我的两个构造函数:Allocator( std::shared_ptr<Type>& pType ); & Allocator( std::unique_ptr<Type>& pType );以及两个匹配 allocate()功能工作正常。构造函数Allocator( Type type, void* pPtr );它的匹配功能是我遇到麻烦的地方。

构造函数本身很简单,因为它所做的只是调用匹配函数并将变量传递给它。

template<class Type>
Allocator<Type>::Allocator( Type type, void* pPtr ) {
allocate( type, eType, pPtr );
}

我正在苦苦挣扎的是函数实现。

template<class Type>
void Allocator<Type>::allocate( Type type, void* pData ) {
if ( pData == reinterpret_cast<void*>( std::shared_ptr<Type ) ) {
std::shared_ptr<Type> pShared;
pShared.reset( new Type( type ) );
pData = reinterpret_cast<void*>( pShared );

} else if ( pData == reinterpret_cast<void*>( std::unique_ptr<Type ) ) {
std::unique_ptr<Type> pUnique;
pUnique.reset( new Type( type ) );
pData = reinterpret_cast<void*>( pUnique );

} else {
std::cout << "Error invalid pointer type passed in << std::endl
<< "must be either a std::shared_ptr<Type> << std::endl
<< "or a std::unique_ptr<Type> << std::endl;
}
}

除了检查是否 void*传入的是 std::shared_ptr<Type>std::unique_ptr<Type>我可能有的其他问题是,我对 reinterpret_cast<void*> 的使用将智能指针转换为 void 指针的正确方法,如果不是,如何实现?

最佳答案

您无法检查 void* 是什么类型。这是一个 void*。就是这样。它不像 boost::any 那样巧妙地隐藏了一些其他类型的信息。它只是 void*。您无法检查它来自什么类型。您无法测试它是否来自特定类型。你的信息为零。压缩。纳达。 Zilch。空白。

关于c++ - 测试传递给函数的 void* 是 shared_ptr 还是 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com