- 浏览: 230228 次
- 性别:
- 来自: 昆明
文章分类
最新评论
-
beiyangshuishi:
确实挺幽默的,太能恶搞了。不过这也让我想起日本的一则广告宣纸的 ...
一对活宝—— MySQL & PostgreSQL -
ShiningRay:
稍微看了vcf的api,比wxwidgets要干净得多
VCF 库的搞笑提示 -
Colorful:
Wow, this is amazing.
D语言 struct constrcutor 的 bug -
oldrev:
楼下,当时的 TRAC 确实说是要 py 2.4 的
出色的开源项目管理软件——Redmine -
jusdao:
...Trac可以用python2.5啊,没有说必须用2.4的 ...
出色的开源项目管理软件——Redmine
通过1.0的代码完全模拟了 D 2.0 __traits(hasMember...) 和部分 getMember 的功能:
参考: http://www.digitalmars.com/d/traits.html
特别要指出的是 is(typeof(Aggr.member)) 的用法及 alias 模板参数重载来自于 redsea 兄
我试了一下,没想到这样也能重载,如此 HasMember 模板甚至可以检测模块和模板中的成员。
OMG,D确实有点恐怖。
应该是模板选择吧 (这里似乎还不是偏特化, T 和 alias T 不兼容).
D 的特殊规则比较少就好, 函数可以重载, 模板可以重载, 最小惊讶原则做得好.
我试了一下,没想到这样也能重载,如此 HasMember 模板甚至可以检测模块和模板中的成员。
OMG,D确实有点恐怖。
- import std.stdio;
- template HasMember(T, string member)
- {
- const bool HasMember = is(typeof(mixin("T." ~ member)));
- }
- template HasMember(alias X, string member)
- {
- const bool HasMember = is(typeof(mixin("X." ~ member)));
- }
- //A very limited implemention
- template GetMember(alias X, string member)
- {
- //mixin("alias X." ~ member ~ "GetMember;"); // Compiler's bug?
- mixin("alias X." ~ member ~ " DummyAlias;");
- alias DummyAlias GetMember;
- }
- template BarT()
- {
- const double PI = 3.14;
- }
- void main()
- {
- class Foo
- {
- static int n = 1;
- int m;
- void bar() {
- writefln("Foo.bar()");
- }
- static void add(int x, int y) {
- writefln("Foo.add(): ", x + y);
- }
- }
- writefln(HasMember!(Foo, "bar"));
- writefln(HasMember!(Foo, "m"));
- writefln(HasMember!(Foo, "sizeof"));
- writefln(HasMember!(Foo, "foo"));
- writefln(HasMember!(Foo, "y"));
- writefln(HasMember!(int, "sizeof")); //内置属性也支持
- writefln(HasMember!(std.stdio, "writefln")); // 支持检测模块中的成员
- writefln(HasMember!(BarT!(), "PI")); // 支持模板成员
- GetMember!(Foo, "n") = 2;
- writefln("Foo.n=", Foo.n);
- GetMember!(Foo, "add")(12, 34); //调用 Foo.add()
- }
参考: http://www.digitalmars.com/d/traits.html
特别要指出的是 is(typeof(Aggr.member)) 的用法及 alias 模板参数重载来自于 redsea 兄
评论
14 楼
oldrev
2007-10-22
刚才发现了一个大问题,似乎2.0的 __traits 无法处理函数重载。比如 __traits(allMember) 只能返回所有方法的签名,同名的重载函数无法去分开,getMember 也有同样的问题。
13 楼
DavidL
2007-10-12
嗯, javaeye的code在回复里面有bug啊
template myt(T)
{
static if(is(T==int))
{
void func(T t)
{
}
}
else
void func1(T t)
{
}
}
void main()
{
myt!(int).func(3);
myt!(char).func1(3);
}
引用
template myt(T)
{
static if(is(T==int))
{
void func(T t)
{
}
}
else
void func1(T t)
{
}
}
void main()
{
myt!(int).func(3);
myt!(char).func1(3);
}
12 楼
DavidL
2007-10-12
不可能支持未实例化的模板的
因为考虑
因为考虑
template myt(T) { static if(is(T==int)) { void func(T t) { } } else void func1(T t) { } } void main() { myt!(int).func(3); myt!(char).func1(3); }
11 楼
DavidL
2007-10-12
不可能支持未实例化的模板的
因为考虑
因为考虑
template myt(T) { static if(is(T==int)) { void func(T t) { } } else void func1(T t) { } } void main() { myt!(int).func(3); myt!(char).func1(3); }
10 楼
oldrev
2007-10-11
在两个模板里分别加入 pragma(msg) 就知道编译器优先选择了 alias 模板。在上面的测试程序中,只有 HasMember!(int,... 那行选择了非 alias 模板。似乎是 alias 参数化符号的优先级比较高,但是文档里没有明确。
9 楼
redsea
2007-10-11
引用
我试了一下,没想到这样也能重载,如此 HasMember 模板甚至可以检测模块和模板中的成员。
OMG,D确实有点恐怖。
应该是模板选择吧 (这里似乎还不是偏特化, T 和 alias T 不兼容).
D 的特殊规则比较少就好, 函数可以重载, 模板可以重载, 最小惊讶原则做得好.
8 楼
oldrev
2007-10-11
引用
这样用, 就不必使用麻烦的字符串, 而且可以解决我上面说的问题了:
template HasMember(T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(alias T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(alias T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
我试了一下,没想到这样也能重载,如此 HasMember 模板甚至可以检测模块和模板中的成员。
OMG,D确实有点恐怖。
7 楼
oldrev
2007-10-11
我的程序就是在 1.0 下测试通过的,GDC 0.24 && DMD 1.20
用 alias 模板参数的问题是无法处理内置类型的属性,比如 int.sizeof 就无法确定。
用 alias 模板参数的问题是无法处理内置类型的属性,比如 int.sizeof 就无法确定。
6 楼
redsea
2007-10-11
这样用, 就不必使用麻烦的字符串, 而且可以解决我上面说的问题了:
template HasMember(T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(alias T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
template HasMember(alias T, char [] member)
{
const bool HasMember =
is( typeof(mixin("T." ~ member)) );
}
5 楼
redsea
2007-10-11
我碰到的问题是, 我要进行判断的不是一个类, 而是alias 参数, 用做 mixin part, 用第一种形式的话, 无论我是将 alias 参数实例化作为参数, 还是 mixin part 名字作为参数均错, 只能用我提供的第二种形式.
4 楼
redsea
2007-10-11
我搞错了, 直接用参数 T 而不是字符串, 是可以的, 我之前可能碰到其他问题了.
3 楼
redsea
2007-10-11
哦, 对了, 我用的是 1.018, 是不是太老了
2 楼
redsea
2007-10-11
D1.0 下面要写成这样才能用.
看来, 模板中处理mixin D2.0 有改进.
template HasMember(char [] T, char [] member)
{
const bool HasMember =
is( typeof(mixin(T ~"." ~ member)) );
}
看来, 模板中处理mixin D2.0 有改进.
template HasMember(char [] T, char [] member)
{
const bool HasMember =
is( typeof(mixin(T ~"." ~ member)) );
}
1 楼
tomqyp
2007-10-08
怎么不能收藏呢
发表评论
-
Tango 0.99.7 Dominik 今天放出
2008-07-25 12:16 1381详细的发布公告: http://www.dsource.org ... -
D新闻组里的天才代码
2008-03-30 21:26 3267超猛的代码,刚才逛新闻组刚看到的,随便记录一下。 出自: ... -
Ubuntu & D
2008-03-23 12:33 2384前几天 Ubuntu Linux 8.04 (Hardy) 刚 ... -
Dotmars.test 单元测试框架简介
2007-11-19 22:43 94D语言内置的 unittest关键字+assert 组成的单元 ... -
mixin 模拟多继承
2007-11-10 17:40 3653D1.0 代码 /** TupleMixin ... -
简单的 C to D 转换 Ruby 脚本
2007-10-24 22:06 4594今天晚上费了点脑筋写了一个简单的 C2D 转换脚本,大致实现了 ... -
更好的C++——给C++使用者的D语言简介
2007-09-14 01:30 12221作为 C++ 狂热的粉丝, ... -
让D代码自己编译自己
2007-09-12 22:55 4752刚在 D语言的新闻组里看到了D模板&元编程顶尖高人 ... -
Dotmars 实例之:容器、迭代器与算法框架
2007-08-03 23:49 5676Dotmars 实例之:容器、迭代器与算法框架 这几天 Mr. ... -
基于 D 2.0 编译时反射的单元测试框架
2007-07-27 21:25 2794一个模仿 Ruby Test::Unit 的 Quick &a ... -
D 2.0 Const/Final/Invariant 概念简介
2007-07-24 22:55 5423D 2.0 Const/Final/Invariant 概 ... -
DotMars 版 Hello World
2007-06-05 02:17 8184DotMars 已经具有初步的样子了,特别发帖庆祝。 Dot ... -
关联数组字面值+函数字面值=支持任意类型的 switch
2007-05-19 23:29 4512刚才写字符串格式化的由于要处理所有内置类型,而且只有 Type ... -
.Net/Java 风格格式化字符串
2007-05-18 22:51 3585基础类库的东西看起来容易做起来难,今天花时间实现了一点点 . ... -
修改版 juno.com.base
2007-04-20 00:28 4280dsource 上的 juno 是一个很不错的 Windows ... -
C#-like 的 DLL 封装
2007-04-16 23:19 4369一个类似 C# 的 DllImport 实现,用于“半”动态加 ... -
简单的D语言 VIM 缩写插件
2007-04-13 15:45 3449昨晚我写了一个非常简单的 VIM 的D语言缩写插件,希望能让用 ... -
双向链表模板类
2007-04-07 02:03 3020参考 STL 实现的 Quick & Dirty 双向 ... -
用Rant自动化D语言程序构建
2007-03-31 13:54 3192上回说到 Rank 这个 Ruby 世界最广泛使用的构建工具在 ... -
D语言通用 Rakefile
2007-03-31 00:21 2905在一个日文网站上发现的通用 Rakefile for GDCr ...
相关推荐
Impacts of Organizational Culture__ and Personality Traits on Decision-making in Technical Organizations.pdf
#include <type_traits.h> #endif #include <string.h> #include <limits.h> #include <stdlib.h> #include <stddef.h> #include <new.h> #ifdef __STL_USE_NEW_IOSTREAMS #include #else /* __STL_USE_NEW_...
R Material_traits.html
包含内容:traits-6.1.0-cp36-cp36m-win_amd64.whl 安装tvtk需要 VTK-7.1.1-cp36-cp36m-win_amd64.whl numpy-1.12.1+mkl-cp36-cp36m-win_amd64.whl traits-4.6.0-cp36-cp36m-win_amd64.whl mayavi-4.5.0+vtk71-cp36...
PHP 实现代码复用的一个方法 traits新特性_.docx
c++_traits Classes which encapsulate properties of types Is this an integer type? An arithmetic type? A pointer type?... Closely related to partial specialization
Python科学计算三维可视化应用中需要安装TVTK库,traits-4.6.0-cp36-cp36m-win_amd64.whl为安装TVTK库所需要的5个库之一,该库为64位的
资源分类:Python库 所属语言:Python 资源全名:link_traits-1.0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
变体访问 一组特征和宏,用于基于C ++标准库中的std :: variant API为Rust枚举定义通用api基本用法考虑以下枚举: enum Enum { F1 ( i32 ), F2 ( bool )} 当然,我们可以直接使用字段名称和match语句使用此类枚举。...
space_sp_traits UCR-NSF项目中使用的功能和代码。
callable_traits, callable类型的现代 C 型特征和泛函 Boost.CallableTraits CallableTraits是一个C 11头库,用于检查。合成和分解可以调用类型。这里有最新的文档,这里是 。在CallableTraits中,被正式地检查过,...
3.4. Traits:创建交互对话
支持python3.7版本,支持python3.7版本,支持python3.7版本
Tejon_Functional_Traits 在第戎牧场封闭试验中发现草食动物密度与气候之间关系的项目
特质 go-traits是一个概念包,可使用嵌入式结构和挂钩接口帮助实现行为。 特性列表: traits.Hasher唯一哈希生成器的扩展。... traits.schedule实现traits.schedule以在traits.Init调用的单独goroutine
C++ lua Kaguya 应用
_Normal_allocator_traits 源码分析
包含内容:mayavi-4.7.1+vtk82-cp36-cp36m-win_... traits-4.6.0-cp36-cp36m-win_amd64.whl mayavi-4.5.0+vtk71-cp36-cp36m-win_amd64.whl PyQt4-4.11.4-cp36-cp36m-win_amd64.whl 其他内容在点击我的博客看我的上传
atomic-boost-1.70.0.tar.gz boostorg-beast-boost-1.70.0.tar.gz boostorg-bimap-boost-1.70.0.tar.gz boostorg-bind-boost-1.70.0.tar.gz boostorg-build-boost-1.70.0.tar.gz boostorg-callable_traits-boost-...
C++标准库(第二版)英文版.pdf 非扫描版+源代码 Prefaceto the SecondEdition xxiii Acknowledgments for the SecondEdition xxiv Prefaceto the FirstEdition xxv Acknowledgments for the FirstEdition xxvi 1 ...