, выполняемый через следующую функцию с использованием gdb в vscode, говорит мне, что выведенные значения argTypes для функции вида T (*)(const int &, const int *, int &, int)
равны int
const int *
int &
и int
соответственно. Есть ли способ заставить компилятор выводить const Type &
при представлении аргумента const Type &
? Или есть какие-то другие средства, с помощью которых я могу извлечь эту информацию о типе полезным способом?
#include<typeinfo>
template<typename T, typename...argTypes>
void testfunc(T (*f)(argTypes...))
{
const char *a[] = { typeid(argTypes).name()... };
for(auto &av :a)
{
std::cout << av << std::endl;
}
}
edit: немного больше контекста: эта функция, очевидно, ничего не делает, но проблемная функция, которая ее породилатакже принимает все аргументы для запуска с f таким образом, чтобы они не выводились, а конвертировались. Это создает проблему для непереписываемых объектов, используемых в качестве константных ссылок.
Пример использования testfunc
следующий:
#include "testfunc.h"
std::vector<bool> funcToTest(const int &a, const int *b, int &c, int d)
{
std::vector<bool> out;
out.push_back(&a == b);
out.push_back(&c == b);
out.push_back(&d == b);
return out;
}
int main()
{
// put a breakpoint here, and step in, you would see that 'a'
// describes the situation as described above.
testfunc(funcToTest);
}