小编Fuz*_*Fuz的帖子

在获取地址时隐式实例化功能模板

注意:我已经看过这里,我认为答案是对的.

在获取地址时,管理函数隐式实例化的规则是什么?n3242的14.7.1/9说:

实现不应隐式实例化函数模板,成员模板,非虚拟成员函数,成员类或不需要实例化的类模板的静态数据成员.

现在,当然不需要有一个函数定义来获取它的地址.我们可以获取前向声明函数的地址,并将它们定义在不同的转换单元中.

既然如此,我不知道什么时候需要它.然而,编译器似乎有自己的想法.在GCC和VC上进行测试,这里有几个例子:

template <typename T> void CallBanana() { T::Banana(); }
template <typename T> void CallUnimpl();

template <typename T>
struct S {
    static void CallBanana() { T::Banana(); }
    static void CallOrange() { T::Orange(); }
    static void CallUnimpl();
};

struct B { static void Banana() {} };

int main() {
    (void)(&CallBanana<void>); // 1
    (void)(&CallUnimpl<void>); // 2
    (void)(&S<void>::CallBanana); // 3
    (void)(&S<void>::CallOrange); // 4
    (void)(&S<void>::CallUnimpl); // 5
    (void)(&S<B>::CallBanana); // 6
}
Run Code Online (Sandbox Code Playgroud)

这些应该一次评论一次以查看效果.

在这里测试的 GCC 4.7 将抱怨1,3和4.因此它实例化所有定义(如果它们存在).

VC 2010(没有在线测试,抱歉)实例化3和4,但没有实例化1.

此处测试的 …

c++ templates language-lawyer

7
推荐指数
1
解决办法
619
查看次数

==和案例之间的区别?

我是Ruby的新手,我正在努力解决一些困扰我的问题.在编写一个简单的解析器时,我发现将char与a进行比较==会产生与将其与case表达式进行比较不同的结果:

File.open('Quote.txt') do |f|
  f.chars.each do |c|
    puts c == '"' ? 'Quote' : 'Err'

    puts case c
    when '"' then 'QuoteCase'
    else          'ErrCase'
    end

    p c == '"', c === '"', c
  end
end
Run Code Online (Sandbox Code Playgroud)

假设Quote.txt是一个包含单引号字符(0x22)的1字节文件,这会产生:

Quote
ErrCase
true
true
"\""
Run Code Online (Sandbox Code Playgroud)

我假设我做错了什么,但我无法弄清楚它是什么.有人可以帮忙吗?

顺便说一句,这是在Ruby 1.9.2中.

ruby parsing file

6
推荐指数
1
解决办法
163
查看次数

标签 统计

c++ ×1

file ×1

language-lawyer ×1

parsing ×1

ruby ×1

templates ×1