2012-04-01 71 views
1

我需要一种强制呼叫恒定版本的成员函数的方法。我试图尽可能提高效率。任何好的解决方案强制呼叫恒定版本的成员函数

编辑:找一个泛型函数

+0

引用const类型或指向const类型的指针。 – Corbin 2012-04-01 04:00:16

+0

寻找一个通用的功能,我可以避免铸造? – dchhetri 2012-04-01 04:05:07

+0

为什么你想要调用const版本呢?我真的不确定这会有多大的性能改进,因为我期望const方法的非const版本基本相同。 – Corbin 2012-04-01 04:07:12

回答

1

引用const类型或指向const类型的指针。

你可以用一种奇特的方式做到这一点,但在一天结束时,这是唯一的方法。

虽然真的,我不明白这是什么目的。似乎这不值得付出努力。

此外,我不太清楚我是否理解通用函数的含义。这需要一些澄清,但如果我理解正确,你想要一个指针/值/引用,并将其传递给一个函数,让它神奇地调用一个const方法?这只有在多态性或至少有相同名称的方法(模板)可以使用时才有效。

0

它使用const或非const版本取决于哪个参数传递自动调用。你只能从const转换为非const。这看起来可能很愚蠢,但这是世界的方式。

举例来说,你可以正常做到这一点:

void function(char foo); 
void function(int foo); 

function(4); 

编译器将“决定为你”来称呼哪一个,你可以把它明确这样做

int x; 
function((int)x); 
function((char)x); 

但是有没有等价的显式传递一个重载的const版本。

当然,你可以简单地只定义一个常数版本,参数将简单地作为const传递。

+0

对不起,沟通意味着成员函数的const版本不是独立函数 – dchhetri 2012-04-01 04:14:29

+0

@ user814628我说明了如何强制使用特定类型的原则,但不能使用强制类型转换为const类型,因为没有办法除了只提供一个const版本。它是否是成员函数并不重要。对不起,如果我不清楚? – 2012-04-01 04:18:29

+0

一个关键的区别是我可以在函数原型的末尾加上“const”来区分。例如,void foo(int)const vs void foo(int) – dchhetri 2012-04-01 04:20:51