Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.125.2] |
|
Сообщ.
#1
,
|
|
|
Приветствую. Есть класс:
class CryptoQuotes { public: float Bitcoin; float Ethereum; float Dash; }; далее получаю котировки с сервера, в функции задаю новые значение так: cryptoquotes.Bitcoin = data[0]; cryptoquotes.Ethereum = data[1]; cryptoquotes.Dash = data[2]; хотелось бы видеть код следующим образом: for (size_t i = 0; i < datanum; i++) { cryptoquotes.member[i] = data[i]; } Имена членов важны, так как использую их в коде, поэтому делаю через класс. Вопрос в шапке, можно ли как-то получить порядковый номер члена класса? Спасибо! |
Сообщ.
#2
,
|
|
|
Лучше так не делать, получится непереносимое решение. Попробуй подойти к решению с другой стороны. Так проще будет и быстрее.
Например заведи себе ассоциативный массив, вместо структуры. Или обычный массив. |
Сообщ.
#3
,
|
|
|
Как я писал выше, имена важны, т.к. для каждого имени свой обработчик.
|
Сообщ.
#4
,
|
|
|
Используй тогда ассоциативный массив. например std::map
|
Сообщ.
#5
,
|
|
|
Цитата aceracer @ хотелось бы видеть код следующим образом: for (size_t i = 0; i < datanum; i++) { cryptoquotes.member[i] = data[i]; } class CryptoQuotes { public: float Bitcoin; float Ethereum; float Dash; float &operator[](size_t i) { switch (i) { case 0: return Bitcoin; case 1: return Ethereum; case 3: return Dash; } static float _fake; return _fake; } }; |
Сообщ.
#6
,
|
|
|
Цитата Wound @ Используй тогда ассоциативный массив. например std::map Плюсую |
Сообщ.
#7
,
|
|
|
Цитата Wound @ Используй тогда ассоциативный массив. например std::map С указателями на члены структуры. То есть int -> float CryptoQuotes::* |
Сообщ.
#8
,
|
|
|
А можно вот такой финт сделать:
#include <iostream> using namespace std; using CryptoData = class { public: float Bitcoin; float Ethereum; float Dash; }; union CryptoQuotes { CryptoData Data; float Proxy[sizeof(CryptoData)/sizeof(float)]; }; int main() { CryptoQuotes Crypto; for(auto i=0; i<3; ++i) Crypto.Proxy[i] = (i+1) * (-1.2); cout << Crypto.Data.Bitcoin << endl << Crypto.Data.Ethereum << endl << Crypto.Data.Dash << endl; return 0; } |
Сообщ.
#9
,
|
|
|
Круто, благодарю за столько вариантов!
|
Сообщ.
#10
,
|
|
|
Цитата aceracer @ Круто, благодарю за столько вариантов! Вот еще, на чистом Си, но это Я бы сказал advance C, void structureUpdate(void) __attribute__((constructor)); // for gcc or alv void structureUpdate() { typedef struct cryptoData{ float bitcoin; float ethereum; float dash; } Money; Money money[1]; float* ptr = (float*) money; float value=10.25; ptr[0]=value; ptr[1]=value/2; ptr[2]=value/4; printf(" element = %f %f %f", money->bitcoin, money->ethereum, money->dash); exit(-1); } |
Сообщ.
#11
,
|
|
|
Цитата JoeUser @ using CryptoData = class { public: float Bitcoin; float Ethereum; float Dash; }; А чем это от простого class CryptoData отличается? |
Сообщ.
#12
,
|
|
|
Цитата OpenGL @ А чем это от простого class CryptoData отличается? Собственно, ничем. Просто сперва немного не так начал писать, и забыл поправить. Ну так тож ниче. |