Макрос - это просто текстовая подстановка.
В своем коде вы определили подстановки, но никогда не выполняли их.Вам нужно будет сделать что-то вроде:
void SomeFunc(int arg1, int arg2) {
float value1, value2;
float range;
#define MatrixBlock MyMatrix.block<arg1,arg2>(value1, value2)
#define BlockRange MatrixBlock.block<arg2, range>
MatrixBlock; // as if you had written MyMatrix.block<arg1,arg2>(value1, value2); in the code
BlockRange myRange; // as if you had written MatrixBlock.block<arg2, range> myRange; in the code
/* My code using the above macros */
// Are the following lines necessary? What will happen if I don't undefine the macro?
#undef MatrixBlock
#undef BlockRange
}
Так что да, вы будете получать текущие значения arg1, arg2, value1, value2, range при каждом вызове функции.Я заметил, что вы пытаетесь специализировать шаблон со значениями времени выполнения, которые, я не думаю, будут работать.
Если вы не undef
макросы, они будут доступны для всего кода, следующего заdefine
s, поэтому некоторые последующие методы могут использовать их.Если это находится в заголовочном файле, то все, что включает его, будет иметь доступ к этим макросам.
Это необычно иметь определения внутри метода, но не неслыханно.