2013-10-04 128 views
0

考虑这个例子:模板paramater - 指针模板类型

template< typename T, T &V> 
void doSomething() { 
    V = 1; 
} 

int i; 
double d1, d2; 

int main() { 
    doSomething< int, i>(); 
    doSomething< double, d1>(); 
    doSomething< double, d2>(); 
    return 0; 
} 

是否有可能消除调用类型的名字呢?例如:

doSomething< i>(); 
    doSomething< d1>(); 
    doSomething< d2>(); 

请注意,函数签名不应该改变。您仍然必须能够这样使用它:

typedef void (*THandler)(); 

THandler handlers[] = { 
    &doSomething< int, i>, 
    &doSomething< double, d1>, 
    &doSomething< double, d2> 
}; 
+0

一个侧面说明:在C++'无效的主要()'是'main'无效的签名。 –

回答

1

是的。

template<typename T> 
void doSomething(T& V) { 
    V = 1; 
} 

但是你用这种方式:

doSomething(i); 
doSomething(d1); 
doSomething(d2); 
+0

由于提出的解决方案更改了方法签名,所以这并不回答问题。目的是让函数绑定到在编译时改变的值。以便它们可以放入一个函数指针数组中。 – Sergey

+0

@谢谢:那么答案是否定的。它不能做到。模板函数的类型推导基于函数参数。 –