C++ 一种比使用类来存储指针更优雅的方法,将来会收到它们的值吗?

C++ 一种比使用类来存储指针更优雅的方法,将来会收到它们的值吗?,c++,pointers,C++,Pointers,我使用该类可以在以后的过程中设置指针,如下所示: class PointerContainer{ public: float* FPointer; } 我创建了一个关系,将来将在PointerContainer和将在某个地方创建的浮点变量之间执行: class FutureRelation{ PointerContainer PContainer; int FloatSlot; } PointerContainer somePointerContainer; Futu

我使用该类可以在以后的过程中设置指针,如下所示:

class PointerContainer{
    public: float* FPointer;
}
我创建了一个关系,将来将在
PointerContainer
和将在某个地方创建的浮点变量之间执行:

class FutureRelation{
    PointerContainer PContainer;
    int FloatSlot;
}

PointerContainer somePointerContainer;
FutureRelation connection;
connection.PContainer= somePointerContainer;
connection.FloatSlot=5;
创建具有要连接的浮动的对象时,我解析连接:

connection.PContainer.FPointer = &FloatNumberInThe5thSlotOfSomeObject;
有没有一种更优雅的方法不用使用PointerContainer类就可以做到这一点

注意:FutureRelation对象在执行后将被删除,因此指针不能存储在这些对象上

编辑: 这个问题最终是我想问的问题的一个不完整版本,因为我没有描述整个场景,但无论如何,它本身就是一个完整的问题,我认为它有一个正确的答案(有标记的答案)

话虽如此,这个问题的答案让我暂时得出结论,没有比类更便宜的浮点指针容器了,所以我没有预先定义一些变量连接,只是在创建了所有必要的对象之后链接它们。在这种情况下,性能是关键,因此避免不使用变量容器的间接操作一开始看起来不错

简单的呼叫,如:

int slot= 5;
FPointer= ObjectContainingTheVariables.GetFloatVariablePointer(slot);
使用或
std::pair
。没有无用的代码,每个人都知道什么是配对,双赢。C++11带来了同样好的功能


注:请参阅。

如果我们同意您确实需要
指针容器
来封装
浮点*
(因为我认为它可能封装了更多的内容…),那么一种更优雅的方法就是在对象构造上传递属性值。避免
FPointer
(或
FloatSlot
未初始化)

然后你可以做:

class FutureRelation
{
public:
    FutureRelation( int _FloatSlot ) : FloatSlot( _FloatSlot ) {}

    PointerContainer PContainer;
    int FloatSlot;
}

FutureRelation connection(5);
connection.PContainer = PointerContainer( &FloatNumberInThe5thSlotOfSomeObject );

您可能还需要声明复制构造和赋值运算符。但是默认的在这里表现得很好。

因为你的问题不是一个完整的问题,我将不讨论设计。但是,您可能正在寻求类似以下内容:

class PointerContainer{
    public: float* FPointer;
}
创建一个自由函数:

PointerContainer make_container(float const& x){
    PointerContainer container;
    container.FPointer=&x;    
    return container;
}
而不是:

PointerContainer somePointerContainer;
FutureRelation connection;
connection.PContainer= somePointerContainer;
connection.FloatSlot=5;
connection.PContainer.FPointer = &FloatNumberInThe5thSlotOfSomeObject;
你可以写:

 FutureRelation connection;
 connection.FloatSlot=5;
 connection.PContainer=make_container(FloatNumberInThe5thSlotOfSomeObject);
有没有一种更优雅的方法不用类就可以做到这一点

是的,有。只需使用指针:

class FutureRelation{
    float* ptr;
    int FloatSlot;
}

FutureRelation connection;
connection.ptr = &FloatNumberInThe5thSlotOfSomeObject;
请注意,从未初始化的
PointerContainer
复制初始化,如
connection.PContainer=somePointerContainer是。。。毫无意义

根据您的注释进行编辑:

注意:FutureRelation对象在执行后将被删除,因此指针不能存储在这些对象上

这不应该是个问题。如果在销毁
FutureRelation
实例后需要指针,只需在销毁之前将其复制到其他地方即可:

float* copy = connection.ptr;

PointerContainer c;c、 F指针
浮动*ptr;ptr除了不必要的间接寻址之外?一个简单的变量不是你想要的吗?它必须指向一个指针吗?为什么不只是一个浮点数?你熟悉智能指针吗?STL容器不应该被用来存储引用:@jpo38我有时候太笨了。谢谢你指出这一点。每个人都知道什么是一对。但是几乎没有人知道
连接。第一个
是一个指向浮点的指针,而这个
连接。第二个
是浮点的一个插槽(不管这意味着什么)。我认为
pair
tuple
与一个好的、老式的命名类相比没有任何优势。关键是我不想存储FutureRelation对象。这些关系必须以“执行”和删除的方式工作。这就是为什么我认为我不能将指针存储在FutureRelation对象中。不管怎样,我仍然在考虑所有的可能性。@SaintJob2.0:
PointerContainer
如何解决这个问题?它的语义与原始的
float*
相同,没有任何方法。我在考虑你所有的答案。这花了我一些时间:)@SaintJob2.0好吧,我的代码和你的代码一模一样。所以,如果我的问题不能解决你的问题,那么你的原稿也不能解决你的问题。既不优雅也不另类。我不太明白你对
的意思,我不想存储FutureRelation对象,毕竟,这就是你在问题中所做的。或者
这些关系必须以“执行”和“删除”的方式工作,因此我认为我无法帮助您,除非您能重新表述您的需求。对不起。我的意思是,我想创建变量/指针来存储链接(PointerContainer),然后创建FutureRelationships,然后运行这些关系,删除它们,最后只有初始变量/指针“指向”新的。