我需要创建一个多级子弹列表Microsoft.Office.Interop.Word,我目前正在努力解决其(可怕的)API(再次).
我刚刚用编程语言C#在Microsoft Office Word 2010的VSTO文档级项目中创建了以下示例(不是动态的,仅用于演示目的):
Word.Paragraph paragraph = null;
Word.Range range = this.Content;
paragraph = range.Paragraphs.Add();
paragraph.Range.Text = "Item 1";
paragraph.Range.ListFormat.ApplyBulletDefault(Word.WdDefaultListBehavior.wdWord10ListBehavior);
// ATTENTION: We have to outdent the paragraph AFTER its list format has been set, otherwise this has no effect.
// Without this, the the indent of "Item 2" differs from the indent of "Item 1".
paragraph.Outdent();
paragraph.Range.InsertParagraphAfter();
paragraph = range.Paragraphs.Add();
paragraph.Range.Text = "Item 1.1";
// ATTENTION: We have to indent the paragraph AFTER its text has …Run Code Online (Sandbox Code Playgroud) 目前,我正在尝试增强我的CMake配置约定框架。我的每个C ++组件(即CMake项目)都是通过该框架构建的,并且该框架已经能够使用以下命令创建CMake 软件包配置文件configure_package_config_file()。
PackageConfig.cmake.in框架使用以下(最小)模板文件(v1)。
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
check_required_components("@PROJECT_NAME@")
Run Code Online (Sandbox Code Playgroud)
如果一个组件一切工作正常美孚建造和安装这种做法被其它组件栏与find_package(<package> CONFIG)命令(只要正确的目录路径指向的安装CMake的程序包配置文件美孚通过CLI设置)。
但是(当然)如果A本身具有一个或多个依赖项,则会出现问题。使用当前的方法,B必须拥有A本身的find_package()每个依赖关系
。这意味着当前不将传递依赖项报告给需要依赖项的组件。显然,这不是我想要实现的。
经过一番谷歌搜索后,我了解了该find_dependency()命令,该命令是为解决上述问题而创建的:
它旨在用于程序包配置文件(
<package>Config.cmake)。find_dependency转发正确的参数,QUIET并将REQUIRED其传递给原始find_package()调用。指定的所有其他参数将转发给find_package()。
到目前为止一切顺利,但请等待...我必须再次显式设置每个依赖项名称及其版本?我已经在声明CMakeLists.txt!中的依赖项时做到了这一点。如何使用该方法创建可重复使用的通用程序包配置文件?除了在中明确列出所有依赖项(及其版本)CMakeLists.txt并将该列表传递给之外,我目前无法确定该问题的任何解决方案PackageConfig.cmake.in。
示例:未经测试PackageConfig.cmake.in(v2):
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
# TODO(wolters): How-to implement this with a generic approach? Would the
# following work? Does a better solution do …Run Code Online (Sandbox Code Playgroud) 我目前尝试使用生成器将Visual Studio 2017 的C ++核心准则检查器(CppCoreCheck)与元生成系统CMake集成在一起Visual Studio 15 2017 Win64。
以下示例说明了我的方法(我尝试将CMake源代码精简到最小)。
首先,我将所有编译器开关添加到了构建目标,以使用CppCoreCheck进行分析:
cmake_minimum_required(VERSION 3.12)
project(cppcorecheck-example)
find_package(Boost REQUIRED MODULE)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE Boost::boost)
target_compile_options(app
PRIVATE
"/analyze"
"/analyze:WX-"
"/analyze:log" "cppcorecheck.xml"
"/analyze:stacksize" 16384
"/analyze:max_paths" 256
"/analyze:ruleset" "CppCoreCheckRules.ruleset"
"/analyze:plugin EspXEngine.dll"
)
Run Code Online (Sandbox Code Playgroud)
我正在使用以下内容main.cpp:
#include <boost/system/error_code.hpp>
int main() {
int arr[10]; // warning C26494
int* p = arr; // warning C26485
{
int* q = p + 1; // warning C26481
p = q++; // warning C26481
} …Run Code Online (Sandbox Code Playgroud) c++ cmake visual-studio static-code-analysis cpp-core-guidelines
我将 CMake v3.13.4 与Visual Studio 2017 Win64生成器一起使用,我需要修改 Visual Studio Librarian(对于 CMake 对象库)的命令行选项。
为了实现这一点,CMake 提供了可以通过and命令STATIC_LIBRARY_OPTIONS设置的目标属性。set_propertyset_target_properties
文档指出STATIC_LIBRARY_OPTIONS支持生成器表达式:
\n\n\n的内容
\nSTATIC_LIBRARY_OPTIONS可以使用 \xe2\x80\x9c 生成器表达式\xe2\x80\x9d 和\n 语法$<...>。有关可用表达式,请参阅cmake-generator-expressions(7) \n 手册。有关定义构建系统属性的更多信息,请参阅cmake-buildsystem(7) \n 手册。
但是:无论我尝试什么,这些值都没有正确转义\xc2\xb4,例如
\n\nset_property(TARGET object_library PROPERTY STATIC_LIBRARY_OPTIONS $<$<CONFIG:Release>:/WX /NOLOGO /LTCG /ERRORREPORT:NONE>)\nRun Code Online (Sandbox Code Playgroud)\n\n在 Visual Studio 中会导致以下结果:
\n\nAll Options: `/OUT:"..." /LTCG /MACHINE:X64 /NOLOGO \nAdditional Options: %(AdditionalOptions) /machine:x64 ""$"<1:/WX" "/ERRORREPORT:NONE>"\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试了以下方法,但似乎都失败了。
\n\nset_property(TARGET object_library PROPERTY\n STATIC_LIBRARY_OPTIONS …Run Code Online (Sandbox Code Playgroud) 我刚刚注意到我在我的C++ 11应用程序中使用了以下代码(它运行得很安静):
template <typename T>
std::string output_streamable_to_string(T const& kObject) {
std::ostringstream os;
os << kObject;
return os.str();
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:标准库(std)中是否存在提供此功能的函数?
我知道std::to_string存在,但只适用于标准库数据类型.我想将a转换boost::asio::ip::udp::endpoint为a std::string.既然boost::asio::ip::udp::endpoint只提供了一个operator<<函数,我需要将其转换std::ostream为a std::string.