1
5
其概念是使用宏生成文本的两种形式,
记住,模板函数实际上不会生成任何代码,除非有其他代码调用它们。大多数情况下,这并不重要,但对于一个图书馆来说却是如此。 这段代码没有经过测试,但我相信它会成功的。
|
2
1
这篇文章是我个人的一点点天才。
当您在默认参数中使用alloca时,它实际上是从 来电者 的堆栈,允许您返回数组而不诉诸堆。没有动态分配,没有内存释放。_alloca是MSVC提供的一个CRT函数,所以我不提供任何可移植性保证——但是如果您使用ATL,那么无论如何这都没有问题。当然,这也意味着指针不能放在调用函数的后面,但它应该可以满足格式字符串等临时用途。对于不太可能遇到的异常处理,还有一些注意事项(请查看MSDN了解详细信息),当然,它只适用于具有相同二进制表示的字符,据我所知,这是可以放入窄字符串文字中的每个字符。我很感激,这只解决了您可能遇到的实际问题的一个子集,但它比宏的特定子集要好得多,或者每文本指定两次,等等。 您还可以使用更丑陋但行为更一致的聚合初始化。
在具有可变模板的C++ 0x中,这个解决方案不可能被吸吮。我接近一个更好的解决方案是C++ 03,但不要屏住呼吸。 编辑:你可以这样做,imo是最好的解决方案,但仍然需要一些麻烦。
您必须遍历每个文本并使其成为结构的静态成员,然后引用它,但它的工作效果要好得多。 |
3
0
考虑到只有两种方法可以使用模板,因此不需要使用模板
当然,这是不必使用宏的最简单的方法,假设这是使用字符串实用程序库尝试基于模板的解决方案的原因。 您可以为长而复杂的函数计算出常见的功能:
|
4
0
我也有类似的情况。我已经做了一个源代码文件和一个头文件(当然)我排除了建设。然后通过include指令创建了另外两个包含原始源的源文件。在一个文件中,我在include之前定义UNICODE(如果尚未定义)。在另一个文件中,I#undef UNICODE(如果已定义)。源文件包含一些静态结构和一些函数,这两组char(编译时不是)在文本中是相同的。如果每个函数都有wchar_t或char作为参数,则此方法将导致两组重载函数或两组不同名称的函数(取决于头文件的写入方式,以tchar.h为例)。现在,UNICODE和ANSI版本的函数都可用于应用程序,如果头文件正确写入,则TCHAR的默认版本也是如此。如果你想让我查一下,就这么说吧。 |
5
-1
我相信你想要
|
6
-1
可以对MarkQuoted使用模板部分专用化,并根据类型使用quote。 |
7
-1
好吧,如果你真的想模板化这个,我想我能想到的最好的东西是一个模板化的类,它存储你的文本,基于 this discussion . 像这样的:
那么,你会用
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |