Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向仅使用静态方法的类的指针_C++_Static Methods_Allocator - Fatal编程技术网

C++ 指向仅使用静态方法的类的指针

C++ 指向仅使用静态方法的类的指针,c++,static-methods,allocator,C++,Static Methods,Allocator,有没有一种方法可以获取指向只包含静态方法的类的指针?没有成员变量 我有一个向量类,它使用typename alloc=allocator作为模板参数之一。分配器模板类纯粹由静态方法组成。我打算实现一个get_分配器方法,该方法提供对给定向量分配器方法的访问。例如,为了使其有效: int main() { custom::vector<int> my_vector(10); // custom int-vector of initial size and capacity 10

有没有一种方法可以获取指向只包含静态方法的类的指针?没有成员变量

我有一个向量类,它使用
typename alloc=allocator
作为模板参数之一。
分配器
模板类纯粹由静态方法组成。我打算实现一个
get_分配器
方法,该方法提供对给定向量分配器方法的访问。例如,为了使其有效:

int main() {
    custom::vector<int> my_vector(10); // custom int-vector of initial size and capacity 10
    
    // use my_vector's allocator<int> instead of new (don't ask why)
    int* my_array = my_vector.get_allocator()->allocate(5); 
    // ^^ rhs should produce same result as new int[5]. allocator<T>::allocate uses ::operator new.
}
这会引发MSVC编译器错误2275:“alloc”:非法使用此类型作为表达式 在签名前面加上
typename
,没有帮助

分配器类如下所示:

template <typename T>
class allocator : public mem_core::base_allocator<T> {
public:

    using value_type = T;
    using T_ptr = T*;
    using T_ref = T&;

    static T_ptr address(T_ref value) noexcept {
        return mem_core::addressof<T>(value);
    }

    static void deallocate(T_ptr const ptr, const size_t& count) {
        mem_core::deallocate<T>(ptr, count);
    }

    static T_ptr allocate(const size_t& amount) {
        return mem_core::allocate<T>(amount);
    }
private:
    allocator() = default;
};
模板
类分配器:公共mem_core::base_分配器{
公众:
使用值_type=T;
使用T_ptr=T*;
使用T_ref=T&;
静态T_ptr地址(T_ref值)无异常{
返回mem_core::addressof(value);
}
静态无效解除分配(T_ptr const ptr、const size_T&count){
mem_core::释放(ptr,count);
}
静态T_ptr分配(常数大小和金额){
返回mem_core::分配(金额);
}
私人:
分配器()=默认值;
};

您无法获得指向类型(例如
&int
)的指针,只能指向类型的对象。因此,要么创建一个对象并返回指向它的指针,要么直接通过类型使用静态函数:


custom::vector::alloc::allocate(5)

您无法获取指向类型(例如
&int
)的指针,只能指向类型的对象。因此,要么创建一个对象并返回指向它的指针,要么直接通过类型使用静态函数:


custom::vector::alloc::allocate(5)

这样做具体想实现什么?您希望如何在实践中使用这种指针?我很确定,您正在尝试解决一个XY问题。我想指出,如果您正在为
std::vector
实现一个下拉列表,那么您应该知道
get\u分配器
意味着按值返回一个
分配器类型。因此,如果您符合要求,您的“凭空指针”问题就会消失。您不能获取类型的地址。类型不存在。目标是使
generic\u vector.get\u allocator()
其中
generic\u vector
的类型为
t
等同于简单地编写
custom::allocator。
这样做具体想实现什么?您希望如何在实践中使用这种指针?我很确定,您正在尝试解决一个XY问题。我想指出,如果您正在为
std::vector
实现一个下拉列表,那么您应该知道
get\u分配器
意味着按值返回一个
分配器类型。因此,如果您符合要求,您的“凭空指针”问题就会消失。您不能获取类型的地址。类型不存在。目标是使
generic\u vector.get\u allocator()
其中
generic\u vector
的类型为
t
,等同于简单地编写
custom::allocator。
这确实提供了相同的功能,所以谢谢!注意:此解决方案需要alloc的typedef。我刚刚使用了
typedef alloc分配器
,随后使用了
custom::vector::allocator::allocate(5)
这确实提供了相同的功能,谢谢!注意:此解决方案需要alloc的typedef。我刚刚使用了
typedef alloc分配器
,随后使用了
custom::vector::allocator::allocate(5)
template <typename T>
class allocator : public mem_core::base_allocator<T> {
public:

    using value_type = T;
    using T_ptr = T*;
    using T_ref = T&;

    static T_ptr address(T_ref value) noexcept {
        return mem_core::addressof<T>(value);
    }

    static void deallocate(T_ptr const ptr, const size_t& count) {
        mem_core::deallocate<T>(ptr, count);
    }

    static T_ptr allocate(const size_t& amount) {
        return mem_core::allocate<T>(amount);
    }
private:
    allocator() = default;
};