我正在努力做这项工作:
template < typename T, T VALUE >
void f()
{
/* ... */
}
int main()
{
f<10>(); // implicit deduction of [ T = int ] ??
return (0);
}
目的是简化更复杂的模板。
经过多次搜索,我没有找到任何方法在c++ 0x上做到这一点,所以stackoverflow是我最后的选择。
- 不指定所有类型的T可能…
- 我使用的是g++ c++ 0x,所以性感的东西是允许的。
c++ 0x引入了decltype()
,这正是您想要的。
int main()
{
f<decltype(10), 10>(); // will become f<int, 10>();
return 0;
}
c++中没有结构/类的自动模板推导。你可以这样做(警告,未经测试!):
#define F(value) f<decltype(value), value>
template < typename T, T VALUE >
void f()
{
/* ... */
}
int main()
{
F(10)();
return (0);
}
它不像模板代码那样干净,但它很清楚它的作用,并允许您避免重复自己的负担。如果需要它在非c++ 0x编译器上工作,可以使用Boost。Typeof而不是decltype
我不认为你可以这样做,你只需要让编译器知道那里有一个类型。我能想到的最接近的东西是这样的:
template <class T>
void f(T x) {
// do something with x
}
f(10);
除此之外,我想你可以假设一下,像这样做:
template<size_t x>
void f() {
}
f<10>();
这两种方法都不是你想要的,但是一个好的编译器应该能够节省大量的编译时间,因为你传递的是一个常量。
你能详细说明你想要完成的任务吗?允许使用非整数类型吗?