- 主题:这代码看的晕头转向的
template <typename Func, typename T> struct ContinuationReturnType {
using type = typename std::invoke_result<Func, T>::type;
};
template <typename Func> struct ContinuationReturnType<Func, void> {
using type = typename std::invoke_result<Func>::type;
};
template <typename Func, typename T> struct ContinuationFutureType {
using type = Future<typename RemoveFuture<
typename ContinuationReturnType<Func, T>::type>::type>;
};
template <typename Func, typename T>
using ContinuationFutureType_t = typename ContinuationFutureType<Func, T>::type;
--
FROM 27.208.36.*
在学呢,大概了解一些关键字的用法,但这代码还是看的一头雾水,你帮我看一下下面这一段是什么意思?struct ContinuationFutureType 这个结构里不是定义了一个类型吗?怎么这段代码又调用成函数了?
return CesiumImpl::ContinuationFutureType_t<Func, T>(
this->_pSchedulers,
task.then(
scheduler,
CesiumImpl::WithTracing<T>::end(
tracingName,
std::forward<Func>(f))));
【 在 z16166 的大作中提到: 】
: 这个技法在模板里很常用,就是模板偏特化,最终是为了推导出花括号里面的那个type值来用。
: std库里面也大量用这种type traits技法,比如std::is_same、std::remove_reference等的实现代码
: 从你发的相关帖子看,可以先把C++11的东西学一下
: ...................
--
FROM 27.208.36.*
上下文就是上面我主贴里的代码,这段没看明白,struct ContinuationFutureType结构里好像是定义了一个类型?这是什么用法?
template <typename Func, typename T> struct ContinuationFutureType {
using type = Future<typename RemoveFuture<
typename ContinuationReturnType<Func, T>::type>::type>;
};
【 在 z16166 的大作中提到: 】
: 这个括号,可能是个对象构造,也可能是个仿函数(函数调用)。具体看上下文的代码。
: CesiumImpl::ContinuationFutureType_t<Func, T>()
:
--
FROM 27.208.36.*
查了一上午,大概明白你说的这个意思,现在主要是不明白,这个type在struct ContinuationFutureType结构里定义是咋回事?结构里不是应该定义变量和函数吗?还有最后又怎么是CesiumImpl::ContinuationFutureType_t<Func, T>()这样的方式构造和调用?ContinuationFutureType结构里没有构造函数啊
【 在 z16166 的大作中提到: 】
: 这就是type traits技法
: 里面定义的这个type,最后通过 ContinuationFutureType<Func, T>::type 来使用。
: type的值(其值是个类型)是跟着模板参数Func、T变化的,
: ...................
--
修改:smthxes FROM 27.208.36.*
FROM 27.208.36.*
只是在结构里定义个类型怎么用啊?可以直接用类型生成构造函数吗?这个用法还是不太理解
【 在 z16166 的大作中提到: 】
:
: 结构里面是可以用typedef/using定义类型的
:
: CesiumImpl: : ContinuationFutureType_t() 这个是个啥,也可以对比看汇编代码,看看这里生成的汇编代码干了些啥。你贴的上下文不全。
: --
:
发自「今日水木 on MHA-AL00」
--
FROM 223.104.190.*
谢谢,我在研究一下,Future是代码里的,有点复杂,我没发上来
【 在 z16166 的大作中提到: 】
: struct无非是个特殊的class,class里面可以定义public/private/protected的自定义类型,那么struct里也可以定义public的自定义类型,外面可以直接引用这些类型。
: 简化一下,去掉干扰的东西,逐步替换回去,就是:
: ContinuationFutureType_t<Func, T>
: ...................
--
FROM 27.208.36.*
是个ue4的插件,就因为插件加载失败,我才迫不得已看他代码找问题,问题很诡异,比方说插件里调用了这么一段代码
std::shared_ptr<GltfContent> gltfLoader = std::make_shared<GltfContent>();
插件就不能加载成功,实际上即使在这段代码之前加个return,不执行这段代码,也不能加载成功,只有注释掉这段代码才能加载成功,想不明白是怎么回事
【 在 allegro 的大作中提到: 】
: 代码可以润起来吗?
: 可以的话给个debugger跟着走一次。
--
FROM 27.208.36.*
已经解决了,这个ue插件依赖了一个第三方库,这个库的代码默认是编译成dll的,编译ue插件的时候不报错,但加载插件的时候会出错,后来我把这个第三方库编译成.lib问题就解决了
【 在 mvtec 的大作中提到: 】
: 你虽然加了return
: 但是编译器仍然要编译
: return之后的代码
: ...................
--
FROM 27.208.36.*