Я унаследовал обслуживание программы печати, которая использует CRTP ( Любопытно повторяющийся шаблон )
включить совместное использование производных функций между классами для разных измерений.
Но хотя использование derived().my_funct()
работает на всех компиляторах, оно спутывает Visual Studio Intellisense и отладку, а также Doxygen, поэтому я бы хотел прекратить использовать это в будущем.
Скелетная программа ниже иллюстрирует, что я хочу сделать.
Суть проблемы заключается в сотнях небольших функций для установки характеристик, которые являются общими для всех измерений - кроме ссылки svg1&
или svg2
, позволяющей связывать с return *this
.
Я мог бы создать два включаемых файла, которые отличаются только svg&
, но это было бы не элегантно и стало кошмаром обслуживания.
Предложения приветствуются.
//svg2.hpp
#include <string>
class svg1;
class svg2;
class svg1
{
public:
static const int dim_ = 1;
int size_ = 0;
std::string title_;
svg1(std::string title = "title")
{
title_ = title;
}
svg1& size(int s) // Note svg1&
{
size_ = s;
return *this; // Chainable.
}
// There are nearly 300 more chainable functions like size.
}; // class svg1
class svg2
{
public:
static const int dim_ = 2;
int size_ = 0;
std::string title_;
svg2(std::string title = "title")
{
title_ = title;
}
svg2& size(int s) // Note svg2&, otherwise identical, so want to avoid duplicating hundreds of functions!
{
size_ = s;
return *this; // Chainable.
}
}; // class svg2
#include <string>
#include "svg2.hpp"
int main()
{
svg1 plot1("my_1D_title");
plot1.size(99);
svg2 plot2("my_2D_title");
plot2.size(99);
return 0;
}