小编Ade*_*erg的帖子

如何使用 std::chrono::milliseconds 作为默认参数

场景
我有一个 C++ 函数,它接收一个参数作为std::chrono::milliseconds. 它基本上是一个超时值。并且,它是默认设置为某个值的默认参数。

代码

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
    if (someTimeout > 0) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
    }
}

int main() {
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue))
}
Run Code Online (Sandbox Code Playgroud)

问题
以上所有内容都可以,但是当我使用Fun值调用时,无法编译并收到以下错误:

没有从“bool”到“std::chrono::milliseconds”(又名“duration >”)的可行转换

问题:
我在这里做错了什么?我希望 的调用者在调用 时Fun明确意识到它正在使用. 但编译器似乎不允许用作参数?std::chrono::millisecondsFunstd::chrono::milliseconds

如何使用std::chrono::milliseconds作为默认参数?

在 macOS High Sierra 上使用的环境
编译器是 clang

milliseconds c++11 c++-chrono

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

如何使用 C++11 声明静态查找表

我有 C++11 程序,它需要从一系列值中选择一个值。每个范围都有一个指定的值以从中选择一个值。

以下是我的值范围,并为每个值分配了值。

1-10 = 5
11-14 = 13
15-20 = 17
21-28 = 24
29-36 = 31
37-47 = 43
48-52 = 50
53-60 = 53
61-68 = 65
Run Code Online (Sandbox Code Playgroud)

因此,如您所见,如果输入介于 1-10 之间,则 5 应为返回值,如果输入介于 11-14 之间,则应选择 13,依此类推。

上面的要求可以通过下面的程序来实现,其中包含一个很大的 if else 语句的脏列表。

#include <iostream>

// Following are return values to chosen based on which range the input value falls within
// 1-10 = 5
// 11-14 = 13
// 15-20 = 17
// 21-28 = 24
// 29-36 = …
Run Code Online (Sandbox Code Playgroud)

c++ stdmap lookup-tables c++11 std-pair

6
推荐指数
2
解决办法
982
查看次数

CMake找不到boost_python

我正在尝试从我的MacOS High Sierra上的此链接构建此简单的boost python演示。

以下是hello_ext.cpp

#include <boost/python.hpp>

char const* greet()
{
  return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
  using namespace boost::python;
  def("greet", greet);
}
Run Code Online (Sandbox Code Playgroud)

以下是CmakeLists.txt

cmake_minimum_required(VERSION 3.5)

# Find python and Boost - both are required dependencies
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost COMPONENTS python REQUIRED)

# Without this, any build libraries automatically have names "lib{x}.so"
set(CMAKE_SHARED_MODULE_PREFIX "")

# Add a shared module - modules are intended to be imported at runtime.
# - This is where …
Run Code Online (Sandbox Code Playgroud)

c++ python boost-python

5
推荐指数
1
解决办法
1604
查看次数

使用 WifiManager 打开 wifi 停止在 Android 10 上工作

我有以下代码在 Android 10 之前运行良好。但它无法在 Android 10 设备中打开 wifi。

WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
boolean res = wifiMgr.setWifiEnabled(true);
//res value is set to false above because setWifiEnabled returns false on Android 10
Run Code Online (Sandbox Code Playgroud)

以下是我的权限 AndroidManifest.xml

<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>
<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>
<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>
<uses-permission android:name=\"android.permission.INTERNET\"/>
<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>
Run Code Online (Sandbox Code Playgroud)

我什至动态请求这些权限。但这似乎也无济于事。

问:
Android 10 有什么变化吗?我应该做更多的事情来从我的应用程序以编程方式打开 wifi 吗?

android wifimanager android-10.0

5
推荐指数
1
解决办法
5727
查看次数

如何检查字符串是否严格包含字母和数字

如何检查字符串是否严格包含字母和数字?

跟随还不够?

def containsLettersAndNumber(input):
    if input.isalnum():
        return True
    else:
        return False


isAlnum = containsLettersAndNumber('abc')           # Should return false
isAlnum = containsLettersAndNumber('123')           # Should return false
isAlnum = containsLettersAndNumber('abc123')        # Should return true
isAlnum = containsLettersAndNumber('abc123$#')      # Should return true
Run Code Online (Sandbox Code Playgroud)

请注意,它必须同时包含字母和数字

python python-2.7

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

Altbeacon 停止在 Android10 上工作并且 didEnterRegion 根本没有被调用

Android 10 上的altbeacon已停止工作。是否需要进行任何更改,特别是要转到 Android 10?

我已将以下权限添加到我的 AndroidManifest.xml

<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>
<uses-permission android:name=\"android.permission.BLUETOOTH\"/>
<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>
<uses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\"/>
<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />
<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>
Run Code Online (Sandbox Code Playgroud)

查看应用程序权限,我的应用程序在运行时具有位置和BT权限。我开始onBeaconServiceConnect按照https://altbeacon.github.io/android-beacon-library/samples.html 的规定寻找信标。我错过了什么?

ibeacon android-ibeacon altbeacon kontakt.io android-10.0

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

是否可以在 Android 10 设备上以编程方式启用 wifi?

由于setWifiEnabled在 Android 10 上已弃用,如何在 Android 10 设备上以编程方式启用 wifi?

是否无法在 Android 10+ (SDK 29) 上以编程方式启用 wifi?

wifi wifimanager android-wifi android-10.0

3
推荐指数
2
解决办法
7931
查看次数

如何抑制 GCC 编译器警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z

我正在使用一个内联全局变量,它非常适合它。

class MyClass {
public:
    void Func() {
    }
}

inline MyClass myClass;  // global inline variable
Run Code Online (Sandbox Code Playgroud)

以上适用于我的目的,但是当我的代码在 gcc 上编译时使用低于 C++17 的编译器时我收到警告。以下是警告

警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z

问题:
如何抑制 gcc 上的警告?

我试图通过使用#pragma下面的类似来抑制警告

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc++17-extensions"
inline MyClass myClass;
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)

上述#pragma技术适用于 clang,但看起来 GCC 不理解#pragma? 我只是想蛮力压制 GCC 上的警告。我怎样才能做到这一点?

看起来 gcc 警告选项列表甚至没有提到这个? https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

我正在使用gcc (GCC) 7.3.0

gcc g++ compiler-warnings c++17

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

如何有效地将向量添加到向量

我有 2 个像这样的向量:

std::vector<unsigned char> v1;
std::vector<unsigned char> v2;
Run Code Online (Sandbox Code Playgroud)

当然,他们每个人都有一些数据。

我知道如果我想将 v2 附加到 v1,下面是方法。v1.insert(v1.end(), v2.begin(), v2.end());

问题:
如何将 v1 加到 v2 之前?
v2.insert(v2.begin(), v1.begin(), v1.end())似乎在这里不起作用?

我知道我可能会得到使用的建议,std::deque但问题是这v2std::vector我无法更改的遗留代码中的一个函数。它包含大量数据,我不想v2通过追加复制到这些数据。所以,我只是想加上v1v2因为v1v2

stdvector c++11

2
推荐指数
1
解决办法
151
查看次数

如何将char数据附加到std :: vector而不引起复制

我有一个chars向量,其中包含一些数据元素。

std::vector<unsigned char> data_1;
Run Code Online (Sandbox Code Playgroud)

我有一个未签名的char *,它指向另一组数据元素。

unsigned char * data_2;
Run Code Online (Sandbox Code Playgroud)

问题:
有没有一种方法可以合并data_2data_1向量中而根本不引起数据元素的复制?

我读到了本次讨论中提到的移动语义,但是我不确定在这种情况下是否有可能。

c++ stdvector unsigned-char c++11

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