Как получить путь к файлу, который вызывает данную функцию
Мне нужно сделать так, чтобы я мог получить путь к файлу который вызывает функцию и эта функция могла работать с данным путем (желательно это сделать максимально автоматизированным, то есть чтобы не надо было вводить что-либо в аргументы функции)
Например: есть стандартный файл main.cpp и файлы test.h и test.cpp(например)
test.h:
#pragma once
class Test{
public:
static void getPath();
};
test.cpp:
#include "test.h"
void Test::getPath(){
// Как-то получить путь к файлу, в данном случае путь к main.cpp (так как вызывает эту функцию он)
// Какие-то действия с этим путем
}
main.cpp:
#include "test.h"
int main(){
Test::getPath();
return 0;
}
Извиняюсь за возможные ошибки в коде (я набирал его на телефоне и здесь)
C++17, компилятор я не помню, но IDE - Visual Studio 22
Ответы (1 шт):
В C++20:
#include <iostream>
#include <source_location>
int sum(int x, int y, std::source_location loc = std::source_location::current())
{
std::cout << loc.file_name() << '\n';
return x + y;
}
int main()
{
sum(1, 2);
}
С помощью нестандартной функции __builtin_FILE(), которая, тем не менее, работает на всех основных компиляторах: Clang, GCC, MSVC.
#include <iostream>
int sum(int x, int y, const char *filename = __builtin_FILE())
{
std::cout << filename << '\n';
return x + y;
}
int main()
{
sum(1, 2);
}
По-стариковски, через макрос. Такое работает даже в С.
#include <iostream>
int sum(const char *filename, int x, int y)
{
std::cout << filename << '\n';
return x + y;
}
#define SUM(...) sum(__FILE__, __VA_ARGS__)
int main()
{
SUM(1, 2);
}