6
私は、与えられたシンボルが関数テンプレートであるかどうかを確かめる方法を考え出しています。次シンボルがテンプレートであるかどうかを調べる関数
import std.traits: isSomeFunction;
auto ref identity(T)(auto ref T t) { return t; }
static assert(isSomeFunction!identity);
はidentity
として失敗し、それがインスタンス化されるまでは、まだテンプレートです。私はハックstringof
解析よりも、この他を行うには良い方法があるかどうかを知りたいのですが
//ex: f.stringof == identity(T)(auto ref T t)
template isTemplateFunction(alias f)
{
import std.algorithm: balancedParens, among;
enum isTemplateFunction = __traits(isTemplate, f)
&& f.stringof.balancedParens('(', ')')
&& f.stringof.count('(') == 2
&& f.stringof.count(')') == 2;
}
//Passes
static assert(isTemplateFunction!identity);
:現在、私は<template function symbol>.stringof
は、特定の方法でフォーマットされているという事実に依存しているハックを使用しています。
stringofは、それ以降のテストを行うために得られる最高のものかもしれません。テンプレートをインスタンス化する必要があり、実際にそれを行う保証された方法はありません。 ( 'if(false)'制約付きのものを考えてみると、内部に入ることは不可能です)。 –