当我尝试部分特化函数模板时,为什么我的程序无法运行?

发布于 2024-12-19 13:50:00 字数 959 浏览 2 评论 0原文

我是模板元编程的初学者,试图实现生成相似但略有不同的代码的多个版本:

#include <iostream>

enum Type
{
   a1,
   a2
};
enum Style
{
   b1,
   b2
 };

 template<Type,Style> 
 void doSomething();
 {
   std::cout<<" some rubbish\n";
 };

完全专业化效果很好::

template<> 
void doSomething<a1,b2>()
{
   std::cout<<" this is my template parameters one :" <<a1<< " and  two:"<<b2<<std::endl;
 }

int main(int argc, char* argv[])
{
  doSomething<a1,b1>();
  doSomething<a1,b2>();

   return 0;
}

一些垃圾

:这是我的模板参数一:0和二:1

 template<Style Some> 
  void doSomething<a1,Some>()
 {
  // here I want to use sub-template on some: e.g do_other<Some>
 }

但是像下面这样的部分专业化失败了 错误: 错误C2768:'DoSomething':非法使用显式模板参数

(在这种情况下,通用模板的主体被注释,尽管它没有任何区别)

这种专业化在所有样本中都用于部分专业化,但对我不起作用。这让我很困惑。

非常感谢任何建议

I am an beginner in template metaprogramming trying to implement generation of multiple versions of similar but slightly different code:

#include <iostream>

enum Type
{
   a1,
   a2
};
enum Style
{
   b1,
   b2
 };

 template<Type,Style> 
 void doSomething();
 {
   std::cout<<" some rubbish\n";
 };

Full specialization works well:

template<> 
void doSomething<a1,b2>()
{
   std::cout<<" this is my template parameters one :" <<a1<< " and  two:"<<b2<<std::endl;
 }

int main(int argc, char* argv[])
{
  doSomething<a1,b1>();
  doSomething<a1,b2>();

   return 0;
}

:some rubbish

:this is my template parameters one :0 and two:1

But partial specialization like below fails:

 template<Style Some> 
  void doSomething<a1,Some>()
 {
  // here I want to use sub-template on some: e.g do_other<Some>
 }

with error:
error C2768: 'DoSomething' : illegal use of explicit template arguments

(Body of generic template is commented in this case, though it does not make any difference)

Such specialization is in all samples for partial specialization, but does not work for me. This confuses me a lot.

Very appreciative for any suggestions

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暮凉 2024-12-26 13:50:00

在 C++ 中,您无法函数的部分专业化。考虑将您的函数移至类中。

In C++ you cannot do partial specialization for functions. Consider moving your functions to a class.

浸婚纱 2024-12-26 13:50:00

C++ 优先级函数对您的类型使用专门化,其余部分由普通模板函数处理。

C++ Priorities functions that uses specialization for your types, rest is handled by normal template function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文