小编Ta *_*inh的帖子

取消引用右值shared_ptr

我正在使用一个导出函数的库:

// there is some type T
std::shared_ptr<T> foo(params);
Run Code Online (Sandbox Code Playgroud)

并且以下代码可以正常工作:

auto p = foo(params);
auto & v0 = *p;
// use v0 as a T's reference
Run Code Online (Sandbox Code Playgroud)

以下崩溃:

auto & v1 = *foo(params);
// use v1 as a T's reference
Run Code Online (Sandbox Code Playgroud)

那么v0和之间有什么区别v1?非常感谢您的帮助。

c++ rvalue shared-ptr

7
推荐指数
1
解决办法
172
查看次数

在F#中算术转换为泛型类型

我尝试编写一个为算术类型执行通用转换的函数,例如接收类型参数的函数uint64,然后转换为与类型参数相同的类型.我的想法是:

let convert<'T> (x:uint64) = 'T x
Run Code Online (Sandbox Code Playgroud)

但是这段代码没有编译,我在尝试了几种方法之后就陷入了困境:

let convert<'T> (x:uint64) = 
  match Unchecked.defaultof<'T> with 
    | :? uint32 -> uint32 x
....
Run Code Online (Sandbox Code Playgroud)

那么我如何在F#中编写这样的通用算术运算?(我刚开始学习,所以我的问题可能是愚蠢的,请放轻松).

generics f# casting

5
推荐指数
3
解决办法
855
查看次数

F# 中的通用字符串到整数转换

我正在 F# 中实现一个简单的字符串到整数转换器的转换;逻辑是,例如从stringuint32

let inline sToUint s =
    let mutable v = 0u

    for c in s do
        v <- v * 10u + uint32 c - uint32 '0'

    v
Run Code Online (Sandbox Code Playgroud)

现在我想将此实现用于其他整数类型,例如uint64. 我如何实现一个通用函数来做到这一点?

感谢大家,SRTP(如答案中所使用的)正是我在这种情况下所需要的。以下实现与 @Brian Berns 的答案略有不同

// (char -> ^a) -> (string -> ^b)
let inline sToNum f =
    let tenTimes v = (v <<< 3) + (v <<< 1)
    fun (s: string) ->
        let mutable v = Unchecked.defaultof<_>
        for c in s do …
Run Code Online (Sandbox Code Playgroud)

generics f#

3
推荐指数
1
解决办法
117
查看次数

标签 统计

f# ×2

generics ×2

c++ ×1

casting ×1

rvalue ×1

shared-ptr ×1