поэтому я пытаюсь создать класс с помощью вспомогательного метода, а именно:
class Type{
int a, b, c;
friend auto helper(auto);
friend auto test_helper(auto);
/* couples test with implement */
public:
void method(){
helper(this);
}
};
Но превращение helper
в функцию друга связывает тест с реализацией, если мы хотим протестировать helper
.
Поэтому я хочу сделать helper
бесплатной функцией, а именно:
auto helper(int&,int&,int&);
auto test_helper(int&,int&,int&);
class Type{
int a, b, c;
public:
void method(){
helper(a,b,c);
}
};
Это, однако, делает код намного более утомительным, когда элементов данных много. Итак, мне пришла в голову идея создать вспомогательную структуру с точным элементом данных, как Type
, но со всеми элементами данных, которые являются общедоступными, чтобы мы могли просто передать дескриптор такого HelperType
, может быть, что-то вроде:
struct HelperType{
int a, b, c;
};
auto helper(HelperType* a);
auto test_helper(HelperType* a);
void Type::method(){
helper(static_cast<HelperType*>(this));
}
Существуют ли какие-либо элегантные подходы к созданию такой структуры HelperType
? Например, универсальная оболочка или, возможно, с наследованием?
std::tuple
и пакетом вариативного списка параметров шаблона. - person πάντα ῥεῖ   schedule 08.07.2018#define private public
только в этом тесте было бы приемлемым решением? Это не очень элегантно, но не требует каких-либо модификаций проверенного кода. - person joe_chip   schedule 08.07.2018