一般来说,通用方法对我来说都是新的.需要一个返回泛型类型的Collection的方法,但也需要一个相同泛型类型的集合
Expression<Func<GenericType, DateTime?>>[] Dates
Run Code Online (Sandbox Code Playgroud)
参数.整个以下函数的T应该是相同的类型,所以现在我正在使用(简化版):
private static Collection<T> SortCollection<T>(Collection<T> SortList, Expression<Func<T, DateTime>>[] OrderByDateTime)
{
return SortList.OrderBy(OrderByDateTime[0]);
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
错误:无法从用法推断出方法'System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumberable,System.Func)'的类型参数.尝试显式指定类型参数.
反正有没有这样做?
假设我有一个名为Object的类.Object类有一个成员函数,它想要从容器中读取字符串.假设函数看起来像这样:
template <class InputIterator>
void Object::add(InputIterator first, InputIterator last) { ... }
Run Code Online (Sandbox Code Playgroud)
虽然这允许调用者从任意容器传递字符串,但它并不表示迭代器必须是一对字符串迭代器的事实.
在这种情况下使用模板是否仍然合适,还是应该强制调用者使用预定的字符串容器?
我目前正在编写一个处理通用容器的函数模板.我想用std::begin()和std::end(),因上述原因在这一问题.我的问题是,我是否应该使用:
std::begin( myContainer )
Run Code Online (Sandbox Code Playgroud)
要么:
using namespace std; // Better use: "using std::begin"
begin( myContainer )
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,是否可以begin()在std命名空间内重载?我是否应该允许我的函数用户在其他地方重载全局命名空间中的begin()函数?STL如何处理它?
我写了一个简单的函数来反转给定的数字:
let reverseNumber x =
let rec innerFunc acc elem =
if elem = 0
then acc
else
let rem = elem % 10
innerFunc (10 * acc + rem) (elem / 10)
innerFunc 0 x
Run Code Online (Sandbox Code Playgroud)
问题是它只适用于整数.对于例如,Int64的,我需要创建一个使用另一个版本0L,并10L取代0和10分别.
我听说可以使用内联关键字和LanguagePrimitives编写更多泛型函数,但后者既不包含提醒操作也不包含'GenericTen'(尽管可能通过'GenericOne + GenericOne + ...获得).
你能帮忙吗 ?
我正在使用数据类型泛型编程来调用Generic包含调用方法的类get.如果我的最终用户定义了类型并忘记添加deriving Generic和调用put,他们将看到如下错误消息:
No instance for (ALife.Creatur.Genetics.Code.BRGCWord8.GGene
(GHC.Generics.Rep ClassifierGene))
arising from a use of `ALife.Creatur.Genetics.Code.BRGCWord8.$gdmput'
Run Code Online (Sandbox Code Playgroud)
我可以告诉用户如何修复错误,但我很好奇$gdmput.我认为它是一个自动生成的函数或符号,但是通过什么?它是使用DefaultSignaturespragma还是DeriveGenericpragma?我读了一些关于数据类型 - 泛型编程的论文,但没有看到任何对gdmXXX符号的引用.
这是Generic班级的定义.
{-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances,
DefaultSignatures, DeriveGeneric, TypeOperators #-}
. . .
-- | A class representing anything which is represented in, and
-- determined by, an agent's genome.
-- This might include traits, parameters, "organs" (components of
-- agents), or even entire agents. …Run Code Online (Sandbox Code Playgroud) multimap如下所示:
int main() {
multimap<int, string> coll;
coll = { {5, "tagged"} ,
{2, "a"} ,
{1, "this"} ,
{4, "of"} ,
{6, "strings"} ,
{1, "is"} ,
{3, "multimap"}
};
}
Run Code Online (Sandbox Code Playgroud)
现在,我想得到一个像下面这样的函数模板,逐个打印这些容器中的所有值元素,包括multimap但不限于这种类型的映射和这对特定的模板参数.
void PrintAllMaps(multimap<int, string> map) {
for (auto elem : map) {
cout << elem.second << ' ';
}
cout << endl;
}
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码示例:
#include <iostream>
#include <tuple>
template<typename T, std::size_t Rank, std::size_t... In>
struct help;
template<typename T, std::size_t... In>
struct help<T, 1, In...>
{
static constexpr auto a = std::make_tuple(In...);
T data[std::get<0>(a)];
};
template<typename T, std::size_t... In>
struct help<T, 2, In...>
{
static constexpr auto a = std::make_tuple(In...);
T data[std::get<0>(a)][std::get<1>(a)];
};
template<typename T, std::size_t... In>
class foo : public help<T, sizeof...(In), In...>
{
private:
using base = help<T, sizeof...(In), In...>;
public:
template<typename... Tn>
constexpr foo(Tn&&... args)
: base{ { args... } } …Run Code Online (Sandbox Code Playgroud) 举个例子来看看:
type Mat4x4<T> = [T; 16];
fn main() {
let m: Mat4x4 = [0.4323f32; 16];
println!("{:?}", m);
}
Run Code Online (Sandbox Code Playgroud)
编译器不能推理矩阵类型,工作代码如下:
type Mat4x4<T> = [T; 16];
fn main() {
let m: Mat4x4<f32> = [0.4323f32; 16];
println!("{:?}", m);
}
Run Code Online (Sandbox Code Playgroud)
我不知道这可能是预期的行为.
我有一个看起来像这样的界面:
public interface IFaker
{
Faker<T> GetFaker<T>() where T : class;
}
public class DogFaker : IFaker
{
public Faker<T> GetFaker<T>() where T : class
{
return new Faker<Dog>()
.RuleFor(dog => dog.Name, f => f.Name.FirstName(Name.Gender.Male))
.RuleFor(dog => dog.IsGoodBoy, f => f.Random.Bool());
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 - 我不能Faker<Dog>代替Faker<T>例如
Bogus.Faker<_scratchpad.models.Dog>' to 'Bogus.Faker<T>
显然我无法改变new Faker<Dog>,new Faker<T>因为那时我无法访问Dog属性.
我想像这样使用对象:
private Dictionary<string, object> _fakers;
public FakerService()
{
_fakers = InitialiseFakers();
}
private Dictionary<string, object> InitialiseFakers()
{
return new Dictionary<string, …Run Code Online (Sandbox Code Playgroud) 我试图从函数原型的模板参数声明函数指针
template <typename ReturnType, typename... Args> class DllFunction {
public:
ReturnType (*fptr_)(Args...);
};
DllFunction<int(int)> f;
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
错误:C2091:函数返回功能