Поскольку в моем последнем вопросе было слишком много кода, я попытался сделать простейший пример того, что я пытаюсь сделать. Возьмем, к примеру, это..
#include <iostream>
using namespace std;
class String
{
public:
private:
};
class ClassTwo
{
public:
int memberVariable;
private:
};
class ClassOne
{
public:
ClassOne (ClassTwo&, String&);
~ClassOne();
private:
ClassTwo& classTwoReference;
String& stringReference;
};
ClassOne::ClassOne (ClassTwo& two, String& string)
: classTwoReference (two), stringReference (string)
{
two.memberVariable = 3;
}
ClassOne::~ClassOne()
{
}
int main()
{
String stringObject;
ClassTwo classTwoObject;
ClassOne classOneObject (classTwoObject, stringObject);
}
В JUCE, который является API, который я использую для кодирования плагина VST, есть строковый класс, который JUCE называет «String». Я точно не знаю, что делает конструктор, но вы можете использовать что-то подобное для создания объекта String.
String newString("string");
ClassTwo в моем случае — это класс AudioProcessor, у которого есть общедоступная переменная-член, к которой я могу получить доступ из ClassOne, как это.
two.memberVariable = 3;
В моем случае ClassOne — это настраиваемый компонент (я назвал его PixelSlider), который я использую в своем графическом интерфейсе. Он использует прослушиватель ползунка для проверки состояния ползунка и изменения переменной-члена в ClassTwo (AudioProcessor). Я могу сделать это хорошо, используя описанный выше метод, но проблема в том, что я хочу создать столько объектов ClassOne (PixelSlider), сколько мне нужно. Я хочу передать им объект String, который сообщает им, какую переменную-член ClassTwo (AudioProcessor) нужно изменить. Логически это можно было бы сделать, передав ссылку на объект String с тем же строковым значением, что и имя переменной-члена ClassTwo. Как это,...
ClassOne::ClassOne (ClassTwo& two, String& string)
: classTwoReference (two), stringReference (string)
{
two.(string) = 3;
}
Это не работает в JUCE, но может ли кто-нибудь сказать мне, как это сделать без необходимости создавать кучу разных классов, почти таких же, как ClassOne (PixelSlider), которые изменяют разные переменные-члены ClassTwo (AudioProcessor)?
$x = 1; $s = 'x'; $$s = 42;
установит$x
на 42. Термин для этого — отражение. Если вы будете искать отражение в C++, вы найдете МНОГО вопросов по этому поводу. Короткий ответ заключается в том, что в C и C++ этого нет, компилятор никак не может преобразовать строку, сгенерированную во время выполнения, в поле-член. Язык просто предназначен для этого. Есть много разных способов добиться чего-то подобного, но не ТОЧНО этого. - person Mats Petersson   schedule 17.01.2015using namespace std;
вот почему: stackoverflow.com/questions/1452721/ - person ilgaar   schedule 17.01.2015