Code duplication between typedefs and explicit instantiations

白昼怎懂夜的黑 提交于 2019-11-30 15:17:32

This is invalid and rejected by implementations because a typedef name is used in the elaborated type specifier

template class addition;

The following is invalid too, because the Standard says that there must be a simple template id contained in the elaborated type specifier. Comeau online and GCC both accept it, though.

template class addition::binary_operation;

You could apply a pervert workaround though to be fully Standards compliant

template<typename T> using alias = T;
template class alias<multiplication>::binary_operation;

At least I could not find it being invalid anymore on a quick glance over the spec.

Use a macro. You could write a header like

I_HATE_MACROS(binary_operation<std::plus<unsigned>, '+'>, addition)
I_HATE_MACROS(binary_operation<std::multiplies<unsigned>, '*'>, multiplication)

Then you can do

#define I_HATE_MACROS(a, b) typedef a b;

Or

#define I_HATE_MACROS(a, b) template class a;

Then

#include "DisgustingMacroHackery.h"
Gabriel

I ask my self, why do you actually write a .cpp file as you have templates and they should go either all in the header file or in a seprarate file e.g ".icc", which holds the stuff from the cpp file. I am not sure but tempalates definitions should always NOT be in a compilation unit.

See -> Storing C++ template function definitions in a .CPP file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!