问一道thinking in C++中的题 关于指针和指向成员的指针 如何在模板中定义为非类型参数得问题

wtwhs1985 2020-01-10 03:38:18
首先最简单的int没有问题使用也没有问题
template<int i>
void test(){ std::cout << i << '\n';}

但是当更换为template<int* i>后 我始终无法实例化模板

至于作为成员的指针完全不知道怎么搞 请各位大神解惑

...全文
210 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
月凉西厢 2020-01-14
  • 打赏
  • 举报
回复
引用 13 楼 wtwhs1985 的回复:
[quote=引用 12 楼 taodm 的回复:] 要用全局变量或者static变量。
经测试int*依然无法成功实例化 [/quote] 编译报错已经说的很明白了。需要的是一个编译时常量表达式。在编译之前,a的地址都还不知道呢,你加再多const也没用
taodm 2020-01-13
  • 打赏
  • 举报
回复
要用全局变量或者static变量。
wtwhs1985 2020-01-13
  • 打赏
  • 举报
回复
以下是我的进度,目前以int*为非类型模板参数的模板可以通过编译器,却找不到一个实参去实例化这个模板


#include <iostream>

template<int i>
void test1(){ std::cout << i << '\n';}

template< char* i> //该模板能通过编译,且通过C型字符串指针能够实例化
void test2(){ std::cout << *i << '\n';}
char ci[] = "test";

template<int* i> //该模板能通过编译,但我无法找到能够实例化的参数
void test3(){ std::cout << *i << '\n';}


int main() {

test1<200>(); //能够正常编译
test2<ci>(); //只有C型字符串指针能通过编译

return 0;
}
yshuise 2020-01-13
  • 打赏
  • 举报
回复
编译期间能确定的值是可以用于模板的。
wtwhs1985 2020-01-13
  • 打赏
  • 举报
回复
引用 8 楼 真相重于对错 的回复:
[quote=引用 7 楼 wtwhs1985的回复:][quote=引用 6 楼 真相重于对错 的回复:]
template<int i>可以这么写,但是实例化时候必须是能在编译期确定的量
比如
template<int i>
void test(){}
void main(){
test<1>();
}


请问大神,这道题后面那几个参数能实现出来吗?[/quote]
能不能把上下文贴全?[/quote]

大神 这就是一套完整的题目 就是thinking in C++ 第二卷 第五章 模板 最后的练习题 我已经截取完整的习题了
sdghchj 2020-01-13
  • 打赏
  • 举报
回复
这种题不做也罢,真正的鸡肋。

template<int* i>
void test(){ std::cout << *i << '\n';}
int a;
int main(int argc,char* argv[]) {
    test<&a>();
    return 0;
}
wtwhs1985 2020-01-13
  • 打赏
  • 举报
回复
引用 12 楼 taodm 的回复:
要用全局变量或者static变量。

经测试int*依然无法成功实例化
真相重于对错 2020-01-10
  • 打赏
  • 举报
回复
引用 7 楼 wtwhs1985的回复:
[quote=引用 6 楼 真相重于对错 的回复:]
template<int i>可以这么写,但是实例化时候必须是能在编译期确定的量
比如
template<int i>
void test(){}
void main(){
test<1>();
}


请问大神,这道题后面那几个参数能实现出来吗?[/quote] 能不能把上下文贴全?
wtwhs1985 2020-01-10
  • 打赏
  • 举报
回复
引用 6 楼 真相重于对错 的回复:
template<int i>可以这么写,但是实例化时候必须是能在编译期确定的量
比如
template<int i>
void test(){}
void main(){
test<1>();
}


请问大神,这道题后面那几个参数能实现出来吗?
真相重于对错 2020-01-10
  • 打赏
  • 举报
回复
template<int i>可以这么写,但是实例化时候必须是能在编译期确定的量 比如 template<int i> void test(){} void main(){ test<1>(); }
真相重于对错 2020-01-10
  • 打赏
  • 举报
回复
已经---》以及
真相重于对错 2020-01-10
  • 打赏
  • 举报
回复
模板参数只能是类型已经常量,不能在编译器确定的东西是无法作模板参数的
wtwhs1985 2020-01-10
  • 打赏
  • 举报
回复
大神您好 前面的代码我仅仅是为了做这道练习题用,请您给解答一下这道题
Italink 2020-01-10
  • 打赏
  • 举报
回复
当我啥都没说。。。
Italink 2020-01-10
  • 打赏
  • 举报
回复
我的天呐,template里面放的是模板参数,你写个int i干嘛?当成函数参数来用了

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧