我试图想出一种确定给定符号是否是函数模板的强大方法。以下内容:
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;
}
解析之外是否还有更好的方法。
答案 0 :(得分:0)
似乎现在没有更好的方法在D中执行此操作,因此我将坚持解析.stringof,因为它是一个肮脏的黑客。