0

悲しいことに、現在のソースの場所を operator[] のパラメーター リストで直接使用することはできません。この演算子には引数が 1 つしかないためです。ただし、発信者のソース行を取得できる回避策はありますか? たとえば、次のコードを検討してください。

#include <iostream>
#include <string>
#include <source_location>


struct Test
{
  std::source_location src_clone(std::source_location a = std::source_location::current())
  {
    return a;
  }
    
  //this doesnt work:
  //auto operator[](int a, std::source_location src_clone = std::source_location::current())
  auto operator[](int a)
  {
    return std::source_location::current();
  }
};

int main()
{
  auto t = Test{};
    
  auto s1 = t.src_clone();
  std::cout << s1.line() << ' ' << s1.function_name() << '\n';
    
  // is there a way to make this print "main.cpp:30"?
  auto s0 = t[5];
  std::cout << s0.line() << ' ' << s0.function_name() << '\n';
}
4

1 に答える 1