Size: a a a

2021 March 12

DU

Dmitry Ulyumdzhiev in pro.cxx
magras
В folly реализация мне понравилась. Они в старшие 15 бит 64 битного адреса упаковывают счетчик. При этом один shared_ptr обычно забирает сразу 2^15 ссылок из контрольного блока. При копировании пойнтера будет использоваться этот локальный счетчик, таким образом обычно достаточно одного cas.
Спасибо, очень полезно
источник

t

treg in pro.cxx
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
источник

IZ

Ilia Zviagin in pro.cxx
treg
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
Mock вовсе не обязательны для тестов...
источник

t

treg in pro.cxx
реальный класс тоже не могу использовать так как он связывается с удаленным устройством
источник

IZ

Ilia Zviagin in pro.cxx
treg
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
Не понял, ты же сделал шаблонный класс... Значит, основную проблему решил
источник

IZ

Ilia Zviagin in pro.cxx
treg
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
Зачем копировать код то? Я не понял...
источник

IZ

Ilia Zviagin in pro.cxx
treg
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
Можешь пример привести, когда надо копировать код?
источник

t

treg in pro.cxx
в хедаре шаблон а в cpp файле специализация для конкретного класса
bool RawModelReceiver<class ChunkManager>::RestoreDescriptors(ChunkManager & chunks) { какой-то код}
источник

t

treg in pro.cxx
а в тестах я создаю экземпляр со специализацией MockChunkManager которая не реализована
источник

t

treg in pro.cxx
то есть мне надо тут bool RawModelReceiver<class ChunkManager>::RestoreDescriptors(ChunkManager & chunks) { какой-то код} везде ChunkManager заменить на MockChunkManager
источник

t

treg in pro.cxx
#define ChunkManager MockChunkManager что то вроде этого
источник

P

Pavel in pro.cxx
А может просто специализация не нужна?)
источник

t

treg in pro.cxx
тогда весь код в хедере будет или я ошибаюсь?
источник

P

Pavel in pro.cxx
Да, в хедере
источник

CD

Constantine Drozdov in pro.cxx
может, товарищу надо
#ifdef REALWORLD
using ChunkManager = RealWorldChunkManager;
#else
using ChunkManager = MockChunkManager;
#endif
источник

t

treg in pro.cxx
вот я этого хотел избежать
источник

AS

Anatoly Shirokov in pro.cxx
treg
Добрый день, не подскажите как решить следующую проблему:
есть класс который хочу протестировать с помощью google test:
class RawModelReceiver в классе используется класс ChunkManager с не виртуальными методами, поэтому что бы заменить его на мок класс делаю основной шаблоном. В итоге в заголовке
template<class T>
class RawModelReceiver
в cpp классе специализация RawModelReceiver<ChunkManager>::. Для тестов создал класс MockChunkManager и для него надо тоже сделать специализацию, копировать код или использовать какие-то скрипты не хотелось,
могу я как-то переопределить специализацию с ChunkManager на MockChunkManager только для тестов. В качестве системы сборки Cmake
Я что-то не пойму в чем проблема? У тебя есть шаблон класса, который параметризируется типом. Для прода один класс используй, для теста другой.
источник

P

Pavel in pro.cxx
treg
вот я этого хотел избежать
Ну тогда забудь про неприватные шаблоны
источник

IZ

Ilia Zviagin in pro.cxx
treg
тогда весь код в хедере будет или я ошибаюсь?
Ничего странного в этом нет
источник

t

treg in pro.cxx
понял, спасибо за помощь
источник