是否可以以编程方式创建函数静态对象?

260*_*607 1 c++

我需要创建一个向量来保存指向某些静态对象的指针(例如,a1,a2,a3).

void foo()
{
    static TEST a1, a2, a3;
    static vector<TEST *> m_test;
    m_test.push_back( &a1 );
    m_test.push_back( &a2 );
    m_test.push_back( &a3 );
}
Run Code Online (Sandbox Code Playgroud)

但我不想写出每个static对象的声明.

如何使用循环来执行此操作?我尝试过类似的东西:

    for (unsigned int i=0; i<10; i++)
    {
        m_test.push_back( &(static TEST()));
    }
Run Code Online (Sandbox Code Playgroud)

但似乎在static表达式中没有任何影响,因为对象被破坏了,正如我期望的那样,正常的临时性.

Lig*_*ica 7

函数静态对象只能由具有名称的定义声明创建.你不能static像这样创造一个"功能 - 临时".

怎么样:

static const size_t N = 10;
static TEST tests[N];

for (size_t i = 0; i < N; i++) {
   m_test.push_back(&tests[i]);
}
Run Code Online (Sandbox Code Playgroud)

否则,你别无选择,只能求助于动态存储对象,唯一的对象,它们的存在在任何给定的范围可以通过编程来控制(尤其是因为他们没有真正在任何范围内的话).实际上,这几乎是动态存储持续时间对象用例.