前段时间看nlohmann源代码,想搞明白nlohmann是如何跨namespace调用对应to_json和from_json,最后的结果是,代码怎么写明白了,但是原理还是不懂,如果有明白的大神,麻烦告知一下,以下就是简化后的代码。
//ns.h
#pragma once
#include <stdio.h>
namespace ns1
{
struct ns11
{};
//如果换成普通类型,例如int float就无法调用到此处
static void Show(ns11& n1)
{
printf("ns1:show\n");
}
}
namespace ns2
{
struct ns22
{};
static void Show(ns22& n1)
{
printf("ns2:show\n");
}
}
//ns_call.h
#pragma once
#include <stdio.h>
namespace ns_call
{
struct Show_Fun
{
template<typename _T>
void operator()(_T&& val) const
{
Show(std::forward<_T>(val));
}
};
// constexpr const auto& Show = static_const<Show_Fun>::value;
constexpr const auto Show = Show_Fun{};
}
// test.h
#pragma once
#include "ns_call.h"
#include "ns.h"
static void NsTest()
{
ns1::ns11 n1;
ns2::ns22 f1;
ns_call::Show(n1);
ns_call::Show(f1);
}