小编kks*_*eed的帖子

类型扣除时间

我今天早些时候遇到了这个问题.在以下代码中:

template <int> struct Holder {};

template <typename> struct Helper { using T = Holder<__COUNTER__>; };  // ???

int main() {
  auto a = typename Helper<bool>::T();
  auto b = typename Helper<int>::T();

  std::cout << (typeid(a) == typeid(b)) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译和执行时:

g++ test.cpp -std=c++11 -o test
./test
Run Code Online (Sandbox Code Playgroud)

它打印出1而不是0,这意味着2 Ts Helper<int>Helper<bool>是相同的类型,这让我想知道:

  1. 为什么标记的行// ???只对每种类型执行一次而不是一次?
  2. 有没有办法强制为每种类型执行一次行,最好不修改Holder的定义?

================================================== == 澄清:

(更接近)真实场景是:

  1. struct Holder在第三方库的标头中定义.结构的类型实际上非常复杂,库编写器为用户提供了另一个宏:
template <bool, int> struct Holder {};

#define DEF_HOLDER(b)  Holder<b, __COUNTER__>()
Run Code Online (Sandbox Code Playgroud)

在程序的某个时刻,我想通过对类型进行别名来获取具有当前计数器的类型的"快照",以便可以在函数中使用它:

template <bool …
Run Code Online (Sandbox Code Playgroud)

c++ templates c-preprocessor

8
推荐指数
1
解决办法
556
查看次数

android模拟器geo fix无法设置gps位置

我目前正在Android中测试gps位置(使用SDK Tools rev 21.0.1.我尝试了标准程序:

  1. 创建启用了GPS的模拟器(尝试多个版本,从2.1到4.2)
  2. 启动模拟器
  3. telnet到localhost:5554
  4. 键入geo fix long lat

从理论上讲,这应该将gps设置为.

但以下迹象表明位置未正确设置:

1.当我去maps.google.com或打开谷歌地图时,它总是抱怨无法确定我的位置,他们总是要求我打开wifi.

2.似乎永远不会激活GPS - 状态栏上没有图标.

此外,我尝试了DDMS(已弃用,当然我也尝试过Monitor).似乎什么也没发生.

我之前的链接指向这里: 位置没有更新Android模拟器中的新geo修复

Android - 无法在模拟器上获取gps位置

模拟器上的GPS无法获得地理定位 - Android

但所有这些链接似乎没有帮助.android项目页面上有一些错误报告:http: //code.google.com/p/android/issues/detail?id = 13046

但这是一个相当古老的问题,并未达成最终解决方案.

我想知道是否有其他人遇到类似的问题,请提供一些帮助.谢谢.

gps android emulation

6
推荐指数
1
解决办法
5213
查看次数

如何将值的所有权转移到Rust的C代码?

我正在尝试用FFI编写一些Rust代码,其中涉及C获取结构的所有权:

fn some_function() {
    let c = SomeStruct::new();
    unsafe {
        c_function(&mut c);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想c_function拥有c.在C++中,这可以通过以下release方法实现unqiue_ptr.Rust中有类似的东西吗?

ffi ownership rust

6
推荐指数
1
解决办法
942
查看次数

当我添加生命周期时,有没有办法避免向所有下游结构添加生命周期?

我有一个结构:

struct C {
    field: Box<Fn()>
}

struct D(C)
struct E(C)
struct F(D)
Run Code Online (Sandbox Code Playgroud)

C我想更改to的字段&Fn()以适应命名函数。我遇到了麻烦,因为 Rust 结构中的引用字段需要一个生命周期参数。C现在必须是:

struct C<'a> {
    field: &'a Fn()
}
Run Code Online (Sandbox Code Playgroud)

然后对于D, E, F, 我还必须提供生命周期参数:

struct D<'a>(c<'a>)
struct E<'a>(C<'a>)
struct F<'a>(C<'a>)
Run Code Online (Sandbox Code Playgroud)

想象一下D, E,F有很多impl功能...现在代码需要进行大量更改才能在很多地方添加生命周期参数。

有没有办法避免这样做?的生命周期参数C不能是,'static因为我也有一堆本地定义的闭包。

lifetime rust

5
推荐指数
2
解决办法
1255
查看次数

在Haskell monad链中键入检查错误

我是Haskell的新手,我只是关注RWH的例子.我在第14章遇到以下程序的问题:

import qualified Data.Map as M

type PersonName = String
type PhoneNumber = String
type BillingAddress = String
data MobileCarrier = Honest_Bobs_Phone_Network
                   | Morrisas_Marvelous_Mobiles
                   | Petes_Plutocratic_Phones
                     deriving (Eq, Ord)

findCarrierBillingAddress :: PersonName
                          -> M.Map PersonName PhoneNumber
                          -> M.Map PhoneNumber MobileCarrier
                          -> M.Map MobileCarrier BillingAddress
                          -> Maybe BillingAddress
-- This will work
findCarrierBillingAddress person phoneMap carrierMap addressMap = do
  phone <- M.lookup person phoneMap
  carrier <- M.lookup phone carrierMap
  address <- M.lookup carrier addressMap
  return address

-- This will NOT work: …
Run Code Online (Sandbox Code Playgroud)

monads haskell map

4
推荐指数
2
解决办法
164
查看次数

标签 统计

rust ×2

android ×1

c++ ×1

c-preprocessor ×1

emulation ×1

ffi ×1

gps ×1

haskell ×1

lifetime ×1

map ×1

monads ×1

ownership ×1

templates ×1