相关疑难解决方法(0)

非命名空间范围内的显式特化

template<typename T>
class CConstraint
{
public:
    CConstraint()
    {
    }

    virtual ~CConstraint()
    {
    }

    template <typename TL>
    void Verify(int position, int constraints[])
    {       
    }

    template <>
    void Verify<int>(int, int[])
    {   
    }
};
Run Code Online (Sandbox Code Playgroud)

在g ++下编译它会产生以下错误:

非命名空间范围'类CConstraint'中的显式特化

在VC中,它编译得很好.任何人都可以让我知道解决方法吗?

c++ gcc templates

121
推荐指数
4
解决办法
8万
查看次数

如何驱动C#,C++或Java编译器在编译时计算1 + 2 + 3 + ... + 1000?

在最近的一次采访中,我被问到一个非常奇怪的问题.面试官问我如何使用编译器功能计算1 + 2 + 3 + ... + 1000.这意味着我不允许编写程序并执行它,但我应该编写一个程序,可以驱动编译器在编译时计算这个总和,并在编译完成时打印结果.作为提示,他告诉我,我可能会使用编译器的泛型和预处理器功能.可以使用C++,C#或Java编译器.有任何想法吗???

这个问题与计算总和无关,这里没有任何循环问题.此外,应该注意,总和应该在编译期间计算.不能使用C++编译器指令打印结果.


阅读更多关于发布的答案,我发现在使用C++模板编译期间解决问题称为元编程.这是Erwin Unruh博士在标准化C++语言过程中偶然发现的一种技术.您可以在元编程的wiki页面上阅读有关此主题的更多信息.似乎可以使用Java注释在Java中编写程序.您可以在下面看看maress的答案.

关于C++的元编程一个很好的书是这一个.如果感兴趣,值得一看.

一个有用的C++元编程库是Boost的MPL 这个链接.

c# c++ java compiler-construction metaprogramming

121
推荐指数
9
解决办法
8407
查看次数

实例化模板时短路?

考虑一下这段代码,

template<bool b>
struct other
{
    static const bool value = !b;
};

template<bool b>
struct test
{
    static const bool value = b || other<b>::value;
};

int main()
{
      bool value = test<true>::value;   
}
Run Code Online (Sandbox Code Playgroud)

编译器是否other<true>在上述情况下实例化,实例化时似乎完全没必要?或者仅仅因为我编写了语法other<b>::value,编译器必须实例化它,而不管它是否对计算值的贡献完全没有贡献test<true>::value

我想听听,a)标准需要什么,以及b)各种编译器实际实现了什么?标准的相关部分将不胜感激.

c++ templates instantiation short-circuiting

12
推荐指数
1
解决办法
462
查看次数