У меня есть C-функция под названием «счетчик», который выглядит следующим образом:Как ограничить доступ к статическим переменным в C++?
void count(){
static int c = 0;
printf("Counter=%i", c);
c++;
}
Futhermore У меня есть вектор CPP-объекты и каждый объект вызывает функцию «счетчик». Поскольку переменная счетчика является статической, вызов, сделанный одним объектом, будет увеличивать значение счетчика для всех других объектов. То, что я на самом деле хочу, это выделенный счетчик для каждого объекта, учитывая ограничение, что функция «count» - это «Device-Under-Test» и не может быть изменена. Я думаю, что это должно быть возможно с помощью пространств имен ... Любые идеи?
Моя первоначальная идея состояла в том, чтобы использовать пространство имен ...
namespace c1 {
#ifdef __cplusplus
extern "C" {
#endif
#include "count.h"
#ifdef __cplusplus
}
#endif
}
namespace c2 {
#ifdef __cplusplus
extern "C" {
#endif
#include "count.h"
#ifdef __cplusplus
}
#endif
}
и вызывать из Cpp-объекта, как это ...
if (objNr == 1) c1::count();
else if (objNr == 2) c2::count();
...
Это не работает для меня. Любая идея почему?
Так что вы говорите, что представленный код не может быть изменен? Не имеет смысла. Он будет увеличиваться каждый раз при вызове. Период. –
Если вы хотите, чтобы выделенный счетчик для каждого объекта добавлял этот счетчик в качестве члена класса. –
Кроме того, переменные, объявленные внутри функции, не имеют привязки, поэтому вы не можете обращаться к ним напрямую из любой точки вне их функции объявления. Это предотвращает, скажем, сброс тестового кода переменной между тестами. –