我想要实现的是这样的东西:
template<typename T>
void foo(T t) {
TWithoutReferenceType t1 = Magic(t); //some magic here
}TWithoutReference是相同类型的T,但没有引用,因此,例如:
Magic(int i) -> int i
Magic(int& i) -> int i
Magic(int&& i) -> int i 我不知道这是否有可能用于参考价值,或者它在实践中可能意味着什么。
为什么我需要它:
template <typename ReturnType, typename... Args>
function<ReturnType(Args...)> memoize(const function<ReturnType(Args...)>& func)
{
return ([=](Args... args) mutable {
static map<tuple<Args...>, ReturnType> cache;
tuple<Args...> t(args...);
auto result = cache.insert(make_pair(t, ReturnType{}));
...例如,如果Args ...是vector<double> &,而我改变了元素的顺序,那么cache中的对应键也会被更改,我不希望这种情况发生,所以我不希望将来会有一个键改变作为副作用。
对不起,如果我张贴了整个代码,但我担心,如果我使它更简单,我将失去问题的意义。
发布于 2016-04-28 03:22:49
你发现的是参考文献
如果类型T是引用类型,则提供成员ty对联f类型,它是T.所引用的类型,否则类型为T。 可能的实施 template<类T>结构remove_reference {ty胡枝子T型;};template<类T>结构remove_reference {typedef型;};template<类T>结构remove_reference {typedef型;};
您可以将Magic实现为
template <typename T>
typename remove_reference<T>::type Magic(T t) {
return t;
}发布于 2016-04-28 08:06:42
您有几种选择,包括:
template <typename T>
typename std::remove_reference<T>::type Magic(const T& t) { return t; }或
template <typename T>
typename std::remove_reference<T>::type Magic(T&& t) { return t; }https://stackoverflow.com/questions/36904616
复制相似问题