g****t 发帖数: 31659 | 1 定义个interface,或者用其他的语法糖。
但你既然问了这个问题,多半会被这些乱七八糟的东西
弄的很烦。
不如直接用 函数指针 完整的文档
另外这跟语言有关
Python meta programming 可能可以直接加函数进去 |
|
d*******2 发帖数: 340 | 2 要函数返回两个值,用指针解决了,但是想用结构也试一下,试着写了一个,知道肯定不对,请那位大虾有空看一下,先谢了!
struct merit
{ double merit1;
double merit2;
} mymerit;
主程序
main()
{
function (....merit mymerit); //调用子程序
....
}
子程序
function(....merit mymerit)
{}
调用子程序那一行总有错。说expect primary-expression before mymerit. 把
mymerit前面的merit去掉的话就说parameters has incomplete type “mymerit"
请问应该怎么写?先谢了! |
|
J*****n 发帖数: 4859 | 3 #include "stdafx.h"
#include
#include
using namespace std;
typedef int (*T)(int, int);
int f(int a, int b=5){return a+b;}
int _tmain(int argc, _TCHAR* argv[])
{
T d=f;
cout<
system("pause");
}
谢谢 |
|
a*******h 发帖数: 123 | 4 感觉是没有办法,像你这个T就是一个固定的取两个 int 参数的类型,不能再变了。C+
+这种强类型的语言,不觉得除了用模板以外可以在类型上有任何灵活性。 |
|
|
B*****t 发帖数: 335 | 6 you need to deference the pointer,
cout<<(*d)(2, 2)< |
|
J*****n 发帖数: 4859 | 7
对functor理解不深刻,请教一下大概该怎么写呢?
谢谢。 |
|
|
w*****e 发帖数: 197 | 9 struct functor {
T *m_f;
functor( T *f ) : m_f( f ) { ; }
void operator() ( int arg1 ) const {
( *m_f )( arg1 ); // this will pass compiler
}
};
That's it.
functor d( f );
d( 1 ); |
|
w*****e 发帖数: 197 | 10 Shoot, this will NOT work.
Sorry for the confusion.
I think you are stuck in some sense. |
|
S*********g 发帖数: 5298 | 11 #include
using namespace std;
typedef int (*T)(int, int);
class TT
{
public:
TT::TT(T f):ptr_f(f){}
int TT::operator()(int a, int b=5)
{
return ptr_f(a,b);
}
private:
T ptr_f;
};
int f(int a, int b=5){return a+b;}
int main(int argc, char* argv[])
{
TT d(f);
cout<
system("pause");
} |
|
j*****4 发帖数: 292 | 12 #include
using namespace std;
class add {
public:
int operator()(int A, int B=5) {
return A+B;
}
};
int main() {
add functor;
cout<
system("pause");
} |
|
S*********g 发帖数: 5298 | 13 The operator() can have default argument itself.
Below is an simple example that just works for your specific case.
If you want to have a more general solution, you will have to tell the
functor the information about the default argument in your function f in its
constructor.
You can achieve this by setting up a trait to pass along with you function
pointer.
#include
#include
using namespace std;
typedef int (*T)(int, int);
class TT
{
public:
TT::TT(T f):ptr_f(f){}
|
|
j*******2 发帖数: 386 | 14 小菊啊,就不要丢人了。
并行计算有很多种方式,
Data parallel
Task parall
streaming parallel
还有hybrid的
GPU也就只能在Data Parallel搞一搞。而且有很多限制的,比如不能有函数指针,动态
内存。内存访问要求比较规整,连续。不能有很多分支
你就不要到处丢人了。 |
|
|
c******f 发帖数: 2144 | 16 比如要充分理解了哪些东西才够?感觉这块绕一绕 就不清楚了
比如 **pointer这样的 什么时候传什么值给函数 挺模糊的 |
|
|
h**k 发帖数: 3368 | 18 你这里定义了两个函数指针类型,似乎和题目的要求无关吧?
看不懂原题是要求什么。 |
|
l*********a 发帖数: 445 | 19 看下面代码:
func()
{
std::vector _arr;
int* p = new int(0);
_arr.push_back(p);
p = new int(1);
_arr.push_back(p);
/* 若采用局部变量 p2 表示_arr第二个元素的引用,可以:*/
int*& p2 = _arr[2];
/* 问题:若p2不是局部变量,而是全局变量,也就是在说 p2 在函数体外部已经
声明为 int* p2 了,请问这时如何采用 p2 来表示_arr第二个元素的引用 ??? */
} |
|
f****a 发帖数: 4708 | 20 /* 若采用局部变量 p2 表示_arr第二个元素的引用,可以:*/
int*& p2 = (_arr[1]); // not [2]
/* 问题:若p2不是局部变量,而是全局变量,也就是在说 p2 在函数体外部已经
声明为 int* p2 了,请问这时如何采用 p2 来表示_arr第二个元素的引用 ??? */
Can't be a reference. For the value of the 2nd element:
int * p2;
p2 = _arr[1]; |
|
r***u 发帖数: 241 | 21
应该是2次,先从vptr查表,再调用表中存的函数指针
都是8 |
|
|
|
h**6 发帖数: 4160 | 24 声明了一个返回int*参数为空的,函数指针数组。 |
|
d********w 发帖数: 363 | 25 看到一篇lighttpd源码剖析,http://www.cnblogs.com/kernel_hcy/archive/2009/10/23/1588873.html,发现它的数据结构设计的挺精妙的,比如在定义array时候
通过DATA_UNSET宏,其他类型在定义中直接引用DATA_UNSET宏来模拟继承
通用数组中存放的数据可以是通用数组,这样可以形成多维的通用数组。
typedef struct {
DATA_UNSET;
array *value;
} data_array;
之前看其他开源的代码,有种技巧是使用函数指针和二维数组来实现多态,不过我记得
不大清了,请高人指点完整写法。
比如:
typedef struct {
int (*init)(events *ev);
const char *description;
int num;
} event__t;
int call_back1(events *ev);
int call_back2(events *ev);
int call... 阅读全帖 |
|
Z**********4 发帖数: 528 | 26 恩。。的确很简单
我只是想怎么自己写这种函数 呵呵 |
|
|
a********m 发帖数: 15480 | 28 声明函数指针变量的时候写好参数就可以了吧。如果需要字节解决参数传递/压栈就太
复杂了,而且也失去了可移植性。 |
|
y**********u 发帖数: 6366 | 29
of
这个函数指针是free datum的么?
就是写个递归啊。。。 |
|
h****n 发帖数: 1093 | 30 感觉你说的对,p1完全没啥用处,出了函数p1的值不会被改变
0x12fec8地址存的是9个连续int的最后一个的地址
可能是用来便于下一次连续放9个val2的操作吧
这个题有个follow up说怎么精简代码,我瞎写了一个如下
void foo(int val1, int val2)
{
int step = sizeof(int);
for(int i=0;i<9;i++)
{
*((int *)val1) = val2;
val1 += step;
}
*((int *)0x12fec8) = val1 - step;
} |
|
w**********2 发帖数: 20 | 31 到上周五为止, 我再G家已经面了七个interviewer了, 一个phone interview, 一轮
on-site 四个interviewer, 一轮加面两个interviewer。题目都不难,基本都是常见
题,大家做过的。我总结下板上讨论比较少的几个问题。
1. 我是用python答的题,我写起来比较顺手。7个interviewer 中有一个表示他python
不熟,希望我用别的,但是我自己知道用别的肯定挂,所有坚持用了python并且向他保
证思路一定清晰,好理解。他那题实际上用c++会涉及到一些函数指针当参数,c++长期
不用,估计直接就跪了。python帮我简化了不少。
2. 有一类题型,大家好像没有讨论过,就是一个很大的2D矩阵,如果某点的值,由他
周围某些点的值决定,(例如下一时刻(i,j) 的值取当前时刻他的8邻点的平均),怎么
用MapReduce做。这个其实MapReduce比较熟悉的,想通了特别简单,但到时我差点挂在
那了。折腾了半天才弄出来。
3. 常见题型大家要练熟,思路要清晰。我的问题是做的太慢,一个interviewer 最多
两题,而且基本第一题就... 阅读全帖 |
|
|
h**6 发帖数: 4160 | 33 class Calculator{
public:
int add(int a, int b){
return a+b;
}
int subtraction(int a , int b){
return a-b;
}
};
typedef int(Calculator::*CalPointer)(int,int);
Calculator calc;
CalPointer func1 = &Calculator::add;
int a = (calc.*func1)(2, 3);
std::function func2 = std::bind(&Calculator::add, &calc, _1, _
2);
int b = func2(4, 5);
printf("a=%d, b=%d\n", a, b); |
|
|
|
|
|
s**x 发帖数: 7506 | 38 第一个是java 的吧?c 里面世纪上没有数组参数这个概念,就是一指针.
Void f(int *a)
Void f(int a[]) 应该是等价的。
★ 发自iPhone App: ChineseWeb 7.8 |
|
b******7 发帖数: 92 | 39 数组作参数要带上长度
void func(int a[],size_t len)
c/c++不能直接用参数传递数组,而将其转化为指针传递
上面的定义等价于void func(int * a,size_t len)
测试如下的case就可知道
void func(int a[], size_t len)
{
cout<
}
int main()
{
int a[] = {1,2};
cout<
func(a,sizeof(a)/sizeof(int));
return 0;
} |
|
|
s********r 发帖数: 403 | 41 那个其实只是用了一个函数指针指向了合法地址,
还是需要实例化的对象来发动。 |
|
t****g 发帖数: 35582 | 42 不过严格的来说,C没法OOP的。
也可以实现类方法的包装,不过要用函数指针和回调。但总之不是正路子方法。 |
|
|
d**********o 发帖数: 1321 | 44 读博士?见鬼去吧!
从开学第一天起,我就告诉过导师,我岁数大了,我读不了博士,只想能早点儿毕业早
点儿去工业界工作。但回望这读硕士的两三年时间里,这个计算机系、这个计算机系的
代课老师们,他们一直试图使用种种手段逼迫我读博。13年春天我前导师想要给我奖学
金却还要装模作样,任何学校每年决定一次的RA名额,到了这所学校这里就变成了RA需
要保有两年期效?13年夏天我有机会找到实习了吧,秋天一回到学校就被前导师用种种
不公正手段打倒粉碎为那门课得C,将夏天受启发得到的一丝成就感与自信淹没在前导
师强憾和一手遮天的海浪里!14年初夏,别人好不容易有机会可以出去工作,却还是被
EC代课老师用授课内容阻拦拦截,一所学校,他何至于要这样对待他的学生?14年秋天
关于选EC代课老师的robot课不还是一种赤裸裸的逼迫吗?就连这个春天,他们也丝毫
不曾放弃过!
再来看看除读博外其它我在这所学校所受的种种待遇吧。2012年9月tic-tac-toe有着
诸多要求的programming language第二次作业,我分明是班上仅有的一两个写出来的同
学之一(另一个写出来的同学,他爸爸是剑桥毕业的,后来在... 阅读全帖 |
|
|
r***s 发帖数: 737 | 46 sun jvm 主要用c++写的
ibm production jvm 也是用c++写的,只有jikes rvm是用java写的
intel 和 microsoft的优化编译器也是用c++写的
visual studio大部分都是c++
linux和其他一推用c写的库里面用函数指针来实现c++里的late binding |
|
r********3 发帖数: 2998 | 47 不会啊。我觉得Linux内核代码真的是面向对象的好处。
比如说Linux内核的驱动,就是典型的面对对象。虽然C没有class,但是Linus居然用
struct和函数指针的方式来实现了面向对象,相当赞! |
|
t***m 发帖数: 358 | 48 这有什么可赞的。OO内部本来就是这么实现的。早期的C++就是C的wrapper,class
precompile成 C 的struct加函数指针,然后再调c的compiler。 |
|
b***i 发帖数: 3043 | 49 是java,如果原来的代码是c++, 就是我写的那样,可以用引用或者指针获得地址,从而
给变量赋值。现在要转换成java,如何写呢?
C++程序如下
我有一个类叫storage,其中有个数组double ok[100];
还有个方法acquirereference(int a)想返回ok[a]的引用,比如我在主程序中
storage m;
double& storage::acquirereference(int a)
{
return ok[a];
}
double& myvalue=m.acquirereference(10);// here to get &ok[10] as in c++
myvalue=5;可以让ok[10]获得5。
应该怎样写java的方法acquirereference的返回值类型和return 的参数呢? |
|
l*********n 发帖数: 51 | 50 不是吧,怎么样基本的控制,函数,指针,还是要学的。c怎么会没有?
合在一门课那OO,STL,template还有时间上吗?
国内哪个学校是这么开的? |
|