b***i 发帖数: 3043 | 1 如果可以,能写出你希望的语法吗?就是这个函数的声明和使用的例子? |
|
f*****e 发帖数: 2992 | 2 记得是不是有个
__function__的宏,集采函数名字。
sophisticated |
|
l*******G 发帖数: 1191 | 3 Debug 时显然可以,那么把GCC 修改一下,在每个class和structure里加一个return_
members()函数,貌似可以。 |
|
k********u 发帖数: 148 | 4 C++ Prime 里曾经曰过 (记得是)用public函数return可以访问私有成员。(同意楼
上的) |
|
t****t 发帖数: 6806 | 5 yes you can, as long as all the functions have the same signature. in your
case, looks like you input a double (?) and output a double. |
|
c******e 发帖数: 545 | 6 像这样?
double objectFunc(double (*p_func)(double)) {
if(p_func) {
return p_func(x);
} else {
//do whatever you want
}
} |
|
f*******n 发帖数: 12623 | 7 In C++, you might want to use function pointers or function objects. The
most general is to make a template function that can accept any callable
type:
template
double objectFunc(F func) {
return func(x);
} |
|
t****t 发帖数: 6806 | 8 try use map.find(key)==map.end() for query existence. |
|
l********a 发帖数: 1154 | 9 多谢,我目前程序中有一个map 的判断用的全是
if (map["key"].empty())...
请问这样判断得到的value的结果和直接find(key)哪个更好一点?或者说更标准些? |
|
t****t 发帖数: 6806 | 10 map[key] always create key first if not exist. so you can never check
existence. you can only check the validity of value. |
|
c*******y 发帖数: 1630 | 11 对的,gcc的warning就是说指针类型不匹配的。 |
|
a**e 发帖数: 5794 | 12 相当于C的函数指针的是java.lang.reflect.Method |
|
a**e 发帖数: 64 | 13 how about writing a wrapper function that use your object? |
|
t****t 发帖数: 6806 | 14 show us some details:
what is your member function signature?
what is your C function accepting?
which object are you going to use? |
|
a**e 发帖数: 64 | 15 how about writing a wrapper function that use your object? |
|
t****t 发帖数: 6806 | 16 show us some details:
what is your member function signature?
what is your C function accepting?
which object are you going to use? |
|
|
|
X*K 发帖数: 87 | 19 mapreduce里的map概念是从FP里面的map,但我觉得不是一回事,mapreduce里的map在c
++里是用函数指针,在java里是用strategy pattern,用scala的map应该也是可以的,
前提是用scala实现一个类似hadoop的framework,但感觉这样实现效率可能有问题。 |
|
b***i 发帖数: 3043 | 20 最新进展,这个不是CF本身问题,是嵌入式软件问题。
发现的问题:文件内容被覆盖到文件目录去,该文件的目录项(以及附近同一个扇区的
所有目录项)消失,从而,api不能继续写入文件。
原来的嵌入式软件执行一个无限循环,里面做所有的事情。后来用了第三方的TCP/IP的
软件,估计使用了一些函数指针把CF的api记录了。这样我觉得可能ftp的时候,第三方
的软件直接呼叫了CF API,这些api都是不可重入的,里面有全局变量,比如纪录当前
正在写哪个缓冲区。这个绝对可以造成同一个内容被写入不同区域。我看这个探测CF里
面重复区域的任务不用做了,下面的任务就是确定这个原因,然后需要手写semaphore
级别的东西,因为原来没有使用操作系统,无法实现这些功能。 |
|
h*****n 发帖数: 209 | 21 #define p_s (struct A*)p_v ?
如果只map成一个类型当然这个方法是可以的。
但是如果一个函数需要根据输入参数来动态决定把p_v映射成相应类型就不行了。
void foo(void *p_v, int type)
{
struct A* p_a;
struct B* p_b;
if (type == 1)
{
p_a = (struct A*)p_v,
}
else
{
p_b = (struct B*)p_v,
}
// 但是后面的代码还是要根据type来决定用p_a还是p_b
} |
|
b***i 发帖数: 3043 | 22 #define ASSIGN(nick, var, v)
((nick*) var)->value = v
还是不清楚你的需求到底是什么?你具体写一个完整的函数吧 |
|
c*******h 发帖数: 1096 | 23 就是部分的arguments可以动态定死,剩下的才是真正的argument。就像
y = 100;
Afun = @(x)f(x,y);
g(Afun);
在C里面怎样定义Afun? |
|
t****t 发帖数: 6806 | 24 there's no built-in support for this in C. You can achieve the similar
result with c++ std::bind, e.g.
auto afun = std::bind(f, std::placeholders::_1, y);
afun(x); |
|
c*******h 发帖数: 1096 | 25 刚google了一下,可以这样搞
#include
int f(int x, int y) {
return x+y;
}
int g(int (*Afun)(int x), int x) {
return Afun(x);
}
int main(void) {
int y = 100;
int (*Afun)(int);
Afun = ({ int $(int x){ return f(x,y); } $; });
int x = 20;
int z = g(Afun, x);
printf("z = %d\n", z);
}
gcc是work的,不过我换到intel的compiler就不work了 |
|
k**********g 发帖数: 989 | 26
The key observation is that it needs "state", i.e. it needs to remember both
a function pointer, as well as a place to store the value of "y".
This is the first step toward understanding object-oriented programming:
variables can be captured into a structure, so that they can be accessed by
functions. |
|
|
m*******l 发帖数: 12782 | 28 curry --- Functional Language lover |
|
n****1 发帖数: 1136 | 29 你是说java里面那些dependency injection container之类的么?
那个恰好是java最薄弱的地方,所以才弄出那么复杂丑陋的pattern, 最搞笑的是还要单
独写xml, 莫非你觉得这个很可爱?
任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
指针), 都完全可以轻松解决dependency injection的问题. 不信你随手搜一下"python
dependency", 看看其他人怎么说的.
Why people say they prefer OOP when they don't know what is OOP? |
|
n****1 发帖数: 1136 | 30 比较新的开源C项目里边, dependency都是直接写
struct xxx;
而不是
#include "xxx.h"
如果xxx需要暴露某个public变量, 大家也会写
struct {
int public;
void* priviate;
} xxx;
而不是无脑地 #include "xxx.h"
然后函数指针在开源程序里面到处都是, 不知道你们的项目里用了多少. |
|
N******K 发帖数: 10202 | 31 我举个例子
矩阵加法 每个都是1024x0124大小
A=B+C+D
具体这样 temp1=B+C; temp2=temp1+D; A=temp2;
这里面很多数据共享的问题
比如 简单的 A=B;
A是一个矩阵 A=B 是不是要把所有元素都复制一遍? 显然不用
A.data=B.data; 就行了
A.data 可以是 shared_part
如果要对A只做读操作 A不用重新分配一块内存
如果要对A做写操作 那就测试一下A.data有没有别人在用 还有人用的话 那就复制一块
A重新分配一块内存 复制A.data指向的数据
当然 你要搞多线程 多个线程写一个矩阵 会出问题 你要加锁
锁。lock()
测试一下A.data有没有别人在用 还有人用的话 A重新分配一块内存
锁。unlock()
不过 数值计算一般不会这么搞
如果B没用了 析构函数里面 {data.reset()} 就可以了 不会把数据真给删掉了 |
|
w******w 发帖数: 126 | 32 确定这样的写法是用 C++? 如果是我我宁愿用 functor 取而代之.
如果你要多态的话, 再封装几个classes 吧! 既然你想用 C++ 的OO , 那么就把
C 的函数指针放弃吧. |
|
g*********e 发帖数: 14401 | 33
reference不算语法糖吧。java里所有的变量都是reference。
反正看着比指针舒服 |
|
p***o 发帖数: 1252 | 34 C++的lambda比函数指针的语法糖还是高级一些的 ... |
|
c*******9 发帖数: 9032 | 35 函数指针和lamba完全不同的楖念,它不包合对所指如何操作的信息。用模板可以实现
FP,但不等于模板匹配就是Fp。汇用编什么Fp也都能实现。这样的想法就像知道了变量
可以替换
就以为自己掌握了代数学。 |
|
w********r 发帖数: 1971 | 36 问这个问题,肯定lz对c++不在行。 大牛的书更有效。代理, c# clr 那本书里有原理
性讲解
。说白了就是抽象一下装13,实际上还是object加一个函数指针 |
|
s******u 发帖数: 501 | 37 hmm,没错,signal handler只能是函数指针,没法用bind
另外也可以用class static member function,这样不需要另外定义全局变量和free
function,当然这个handler相应的也不知道class的状态了 |
|
t****m 发帖数: 135 | 38
错,你用typeid看看就知道了。
http://stackoverflow.com/questions/7951377/what-is-the-type-of-
The type of a lambda expression is unspecified.
It is a unique unnamed structure that overloads the function call operator.
Every instance of a lambda introduces a new type.
std::function是call operator的wrapper,支持函数指针,functor、lambda之类的玩
意。并不是一种型别。 |
|
m**********s 发帖数: 518 | 39 C语言函数指针换个马甲就高大上了?
Java匿名类的语法糖,so what?
呵呵 |
|
g*******u 发帖数: 3948 | 40 我现在 有一个vecot> p
我想得到 pointer 传到 一个函数中
能得到吗?
实际 就是我不想再弄一个copy 只想如果能 pointer传进去就好了
多谢 |
|
|
|
y**b 发帖数: 10166 | 43 CLA构造函数加入forward判断,不是好主意吧。另外,去掉这个判断不就提示了吗。 |
|
发帖数: 1 | 44 C真不难,难的是C++。C的奇技淫巧不过函数指针和宏而已,C++列不过来,而且没升级
一个标准还增加一堆特性。真心累人 |
|
g****t 发帖数: 31659 | 45 Numpy很强壮。如果数据类型和数据结构限制在numpy
的框里面转,应该可以写出直接production ready的算法类型的程序。例如不用list
,pandas,用numpy array。
这样可预测性就好很多,但是那样的话,不一定比只用cplusplus容易。
现我这里经过市场检验的办法还是算法研发,和算法定型后的软件开发,要用不同的技
术进行。如果要有一个语言从头走到尾的话,我见过的只有c. 不是c plus plus.
C的语法简单,比lisp还简单。写算法不可能有大量的函数指针,call back等等。
: 我倒是每个超过几行的python project里都有一个C 写的模块,
: 性能敏感的都用C 写。
: 但是我觉得这样其实就限制了思维。因为后来我发现很多我觉得
: 需要用C 写的东西,用numpy也能很漂亮的写出来。
|
|
|
d*******2 发帖数: 340 | 47 是C/C++.请问
double function (double *matrix1, int length)这样 就是用的指针吗?
还有什么更好的办法可以加快计算速度吗?
先谢了! |
|
|
m******r 发帖数: 1033 | 49 不知道你从哪里看的把宏和指针联系起来, 谁教你的啊?
sas 宏有一张宏变量的表。 宏运行的时候,解析其实就是查表
有这个概念 程序怎么写都无所谓。 |
|
|