我需要创建一个向量来保存指向某些静态对象的指针(例如,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 );
}
但我不想写出每个static
对象的声明。
如何使用循环执行此操作?我尝试过类似的东西:
for (unsigned int i=0; i<10; i++)
{
m_test.push_back( &(static TEST()));
}
但似乎static
在表达式中没有任何影响,因为对象被破坏了,正如我期望的那样是正常的临时。
答案 0 :(得分: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]);
}
否则,除了采用动态存储对象之外你别无选择,只能以编程方式控制在任何给定范围内存在的唯一对象(尤其是因为它们不是真正范围根本)。实际上,对于动态存储持续时间的对象,这几乎是 用例。
答案 1 :(得分:0)
除非您的静态对象存储在数组中,否则不能。
答案 2 :(得分:0)
这对你有好处吗?
void foo()
{
static TEST t[10];
static vector<TEST *> m_test;
for (unsigned int i=0; i<10; i++)
{
m_test.push_back( &(t[i]));
}
}
答案 3 :(得分:0)
不是单独声明TEST
个对象,而是声明vector
个TEST
个对象:
void foo()
{
static vector<TEST> a(3);
static vector<TEST *> m_test(3);
for(int i = 0; i < 3; i++)
m_test[i] = &a[i];
// Of course, now you may discover that you didn't
// need "m_test" after all, you could just use "a"
}