确定符号是否是模板函数

时间:2015-10-09 17:16:08

标签: template-meta-programming d

我试图想出一种确定给定符号是否是函数模板的强大方法。以下内容:

import std.traits: isSomeFunction;

auto ref identity(T)(auto ref T t) { return t; }

static assert(isSomeFunction!identity);

identity实例化之前,<template function symbol>.stringof仍然是模板,因此会失败。目前我使用的hack依赖于//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); 以某种方式格式化的事实:

stringof

我想知道除了hacky body { height: 100%; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; overflow: hidden; } a { color: #e0dcd4; text-decoration: none; } .top-nav-container { overflow-x: visible; overflow-y: visible; height: 60px; border-image: linear-gradient(to right, #C04848, #480048) 100% 1; border-image-slice: 50; border-width: 0 0 3px 0; box-shadow: black 0px 12px 9px -9px; } .wrapper { position: static; width: 100%; height: 100%; min-height: 100%; min-width: 100%; background-color: #0b131b; background-image: -webkit-radial-gradient(50% 0%, circle farthest-side, #1b232c 8%, #10171d); background-image: radial-gradient(circle farthest-side at 50% 0%, #1b232c 8%, #10171d); font-family: Lato, sans-serif; font-weight: 300; } .nav-buttons { width: 100%; } .nav-buttons-each { width: 25%; font-family: Lato, sans-serif; color: #e0dcd4; font-size: 16px; font-weight: 300; text-align: center; text-transform: uppercase; } .top-navbar { background-color: transparent; }解析之外是否还有更好的方法。

1 个答案:

答案 0 :(得分:0)

似乎现在没有更好的方法在D中执行此操作,因此我将坚持解析.stringof,因为它是一个肮脏的黑客。