gpt4 book ai didi

c++ - 如何强制使用模板特化?

转载 作者:IT老高 更新时间:2023-10-28 21:37:12 25 4
gpt4 key购买 nike

如果实例化非专用基础版本,我正试图让我的模板函数产生编译时错误。我尝试了通常的编译时断言模式(负数组大小),但即使没有实例化模板,编译也会失败。当且仅当基模板函数被实例化时,关于如何使它失败的任何想法?

template<class Foo> void func(Foo x) {
// I want the compiler to complain only if this function is instantiated.
// Instead, the compiler is complaining here at the declaration.
int Must_Use_Specialization[-1];
}

template<> void func(int x) {
printf("Hi\n");
}

最佳答案

不定义它是最简单的解决方案:

template<class Foo> void func(Foo x);

template<> void func(int x) {
printf("Hi\n");
}

您也可以在 CPP 文件和 use this 中定义它们。这将起作用。

和静态断言方法:

template<class Foo> void func(Foo x) {
static_assert(sizeof(Foo) != sizeof(Foo), "func must be specialized for this type!");
}

关于c++ - 如何强制使用模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8854286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com